diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-23 16:53:53 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-23 16:53:53 +0000 |
commit | 26785ec8d2a7c04eb8c0a8a44c9fec5515c2e64b (patch) | |
tree | 730fb1dd5cb47c7638fd2ccd44d2e5ecb188026c | |
parent | cadce113723715a4985d8ea3925ac95c66cf1076 (diff) | |
download | gcc-26785ec8d2a7c04eb8c0a8a44c9fec5515c2e64b.tar.gz |
* c-common.c (flag_abi_version): Default to 2.
* c-cppbuiltin.c (c_cpp_builtins): Define __GXX_ABI_VERSION
uniformly for versions above 2.
* doc/invoke.texi: Update documentation for -fabi-version.
* cp-lang.c (cp_expr_size): Return zero for empty classes.
* cp-tree.h (warn_if_uknown_interface): Remove unused function.
* decl2.c (warn_if_unknown_interface): Likewise.
* g++.dg/abi/macro0.C: New test.
* g++.dg/abi/macro1.C: Likewise.
* g++.dg/abi/macro2.C: Likewise.
* g++.dg/abi/bitfield5.C: Add explicit -fabi-version=1 option.
* g++.dg/abi/bitfield7.C: Likewise.
* g++.dg/abi/dtor2.C: Likewise.
* g++.dg/abi/mangle11.C: Likewise.
* g++.dg/abi/mangle12.C: Likewise.
* g++.dg/abi/mangle14.C: Likewise.
* g++.dg/abi/mangle17.C: Likewise.
* g++.dg/abi/vbase10.C: Likewise.
* g++.dg/abi/vbase14.C: Likewise.
* g++.dg/template/qualttp17.C: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74973 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-common.c | 4 | ||||
-rw-r--r-- | gcc/c-cppbuiltin.c | 18 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/cp-lang.c | 4 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 1 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 15 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/bitfield5.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/bitfield7.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/dtor2.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/macro0.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/macro1.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/macro2.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle11.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle12.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle14.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/mangle17.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/vbase10.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/vbase14.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/qualttp17.C | 2 |
22 files changed, 85 insertions, 34 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 768fce9b9c3..86135fbff0e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-12-23 Mark Mitchell <mark@codesourcery.com> + + * c-common.c (flag_abi_version): Default to 2. + * c-cppbuiltin.c (c_cpp_builtins): Define __GXX_ABI_VERSION + uniformly for versions above 2. + * doc/invoke.texi: Update documentation for -fabi-version. + 2003-12-22 Geoffrey Keating <geoffk@apple.com> * config/rs6000/rs6000.md: Change many instances of '! diff --git a/gcc/c-common.c b/gcc/c-common.c index ce90433c855..9cdd1441098 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -609,10 +609,12 @@ int flag_enforce_eh_specs = 1; 1: The version of the ABI first used in G++ 3.2. + 2: The version of the ABI first used in G++ 3.4. + Additional positive integers will be assigned as new versions of the ABI become the default version of the ABI. */ -int flag_abi_version = 1; +int flag_abi_version = 2; /* Nonzero means warn about things that will change when compiling with an ABI-compliant compiler. */ diff --git a/gcc/c-cppbuiltin.c b/gcc/c-cppbuiltin.c index 19a9cf48106..739a34224b1 100644 --- a/gcc/c-cppbuiltin.c +++ b/gcc/c-cppbuiltin.c @@ -310,7 +310,23 @@ c_cpp_builtins (cpp_reader *pfile) /* represents the C++ ABI version, always defined so it can be used while preprocessing C and assembler. */ - cpp_define (pfile, "__GXX_ABI_VERSION=102"); + if (flag_abi_version == 0) + /* Use a very large value so that: + + #if __GXX_ABI_VERSION >= <value for version X> + + will work whether the user explicitly says "-fabi-version=x" or + "-fabi-version=0". Do not use INT_MAX because that will be + different from system to system. */ + builtin_define_with_int_value ("__GXX_ABI_VERSION", 999999); + else if (flag_abi_version == 1) + /* Due to an historical accident, this version had the value + "102". */ + builtin_define_with_int_value ("__GXX_ABI_VERSION", 102); + else + /* Newer versions have values 1002, 1003, ... */ + builtin_define_with_int_value ("__GXX_ABI_VERSION", + 1000 + flag_abi_version); /* libgcc needs to know this. */ if (USING_SJLJ_EXCEPTIONS) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 69cbbed94b3..9d13f3da0ed 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2003-12-23 Mark Mitchell <mark@codesourcery.com> + + * cp-lang.c (cp_expr_size): Return zero for empty classes. + + * cp-tree.h (warn_if_uknown_interface): Remove unused function. + * decl2.c (warn_if_unknown_interface): Likewise. + 2003-12-23 Nathan Sidwell <nathan@codesourcery.com> PR c++/13387 diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index 94cf4623ee8..f1f5eedcc54 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -347,7 +347,9 @@ cp_expr_size (tree exp) abort (); /* This would be wrong for a type with virtual bases, but they are caught by the abort above. */ - return CLASSTYPE_SIZE_UNIT (TREE_TYPE (exp)); + return (is_empty_class (TREE_TYPE (exp)) + ? size_zero_node + : CLASSTYPE_SIZE_UNIT (TREE_TYPE (exp))); } else /* Use the default code. */ diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index ba9770515d4..91e38f48223 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3710,7 +3710,6 @@ extern GTY(()) tree last_function_parms; /* in decl2.c */ extern bool check_java_method (tree); extern int grok_method_quals (tree, tree, tree); -extern void warn_if_unknown_interface (tree); extern void grok_x_components (tree); extern void maybe_retrofit_in_chrg (tree); extern void maybe_make_one_only (tree); diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 92b661d7298..4068826a9a9 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -156,21 +156,6 @@ grok_method_quals (tree ctype, tree function, tree quals) return this_quals; } -/* Warn when -fexternal-templates is used and #pragma - interface/implementation is not used all the times it should be, - inform the user. */ - -void -warn_if_unknown_interface (tree decl) -{ - static int already_warned = 0; - if (already_warned++) - return; - - cp_warning_at ("template `%#D' defined in file without #pragma interface", - decl); -} - /* A subroutine of the parser, to handle a component list. */ void diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 012ec043618..db5c0b0ffde 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1274,11 +1274,12 @@ Here is a list of options that are @emph{only} for compiling C++ programs: @item -fabi-version=@var{n} @opindex fabi-version -Use version @var{n} of the C++ ABI. Version 1 is the version of the C++ -ABI that first appeared in G++ 3.2. Version 0 will always be the -version that conforms most closely to the C++ ABI specification. -Therefore, the ABI obtained using version 0 will change as ABI bugs are -fixed. +Use version @var{n} of the C++ ABI. Version 2 is the version of the +C++ ABI that first appeared in G++ 3.4. Version 1 is the version of +the C++ ABI that first appeared in G++ 3.2. Version 0 will always be +the version that conforms most closely to the C++ ABI specification. +Therefore, the ABI obtained using version 0 will change as ABI bugs +are fixed. The default is version 1. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 985f9260c76..7c5ee7fa3cb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,20 @@ +2003-12-23 Mark Mitchell <mark@codesourcery.com> + + * g++.dg/abi/macro0.C: New test. + * g++.dg/abi/macro1.C: Likewise. + * g++.dg/abi/macro2.C: Likewise. + + * g++.dg/abi/bitfield5.C: Add explicit -fabi-version=1 option. + * g++.dg/abi/bitfield7.C: Likewise. + * g++.dg/abi/dtor2.C: Likewise. + * g++.dg/abi/mangle11.C: Likewise. + * g++.dg/abi/mangle12.C: Likewise. + * g++.dg/abi/mangle14.C: Likewise. + * g++.dg/abi/mangle17.C: Likewise. + * g++.dg/abi/vbase10.C: Likewise. + * g++.dg/abi/vbase14.C: Likewise. + * g++.dg/template/qualttp17.C: Likewise. + 2003-12-21 Andrew Pinski <pinskia@physics.uc.edu> PR c/11995 diff --git a/gcc/testsuite/g++.dg/abi/bitfield5.C b/gcc/testsuite/g++.dg/abi/bitfield5.C index eed76e649e6..e754f0ddf22 100644 --- a/gcc/testsuite/g++.dg/abi/bitfield5.C +++ b/gcc/testsuite/g++.dg/abi/bitfield5.C @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-Wabi" } +// { dg-options "-Wabi -fabi-version=1" } struct A { virtual void f(); diff --git a/gcc/testsuite/g++.dg/abi/bitfield7.C b/gcc/testsuite/g++.dg/abi/bitfield7.C index 9868cfce198..b5b656ffa47 100644 --- a/gcc/testsuite/g++.dg/abi/bitfield7.C +++ b/gcc/testsuite/g++.dg/abi/bitfield7.C @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-Wabi" } +// { dg-options "-Wabi -fabi-version=1" } union U { // { dg-warning "ABI" } int i: 4096; // { dg-warning "exceeds" } diff --git a/gcc/testsuite/g++.dg/abi/dtor2.C b/gcc/testsuite/g++.dg/abi/dtor2.C index f4a1336fefa..6b89cc8eae0 100644 --- a/gcc/testsuite/g++.dg/abi/dtor2.C +++ b/gcc/testsuite/g++.dg/abi/dtor2.C @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-Wabi" } +// { dg-options "-Wabi -fabi-version=1" } struct A { virtual void a (); diff --git a/gcc/testsuite/g++.dg/abi/macro0.C b/gcc/testsuite/g++.dg/abi/macro0.C new file mode 100644 index 00000000000..6c391e6891b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/macro0.C @@ -0,0 +1,5 @@ +// { dg-options "-fabi-version=0" } + +#if __GXX_ABI_VERSION != 999999 +#error "Incorrect value of __GXX_ABI_VERSION" +#endif diff --git a/gcc/testsuite/g++.dg/abi/macro1.C b/gcc/testsuite/g++.dg/abi/macro1.C new file mode 100644 index 00000000000..871208da3ad --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/macro1.C @@ -0,0 +1,5 @@ +// { dg-options "-fabi-version=1" } + +#if __GXX_ABI_VERSION != 102 +#error "Incorrect value of __GXX_ABI_VERSION" +#endif diff --git a/gcc/testsuite/g++.dg/abi/macro2.C b/gcc/testsuite/g++.dg/abi/macro2.C new file mode 100644 index 00000000000..9f0af9cff34 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/macro2.C @@ -0,0 +1,5 @@ +// { dg-options "-fabi-version=2" } + +#if __GXX_ABI_VERSION != 1002 +#error "Incorrect value of __GXX_ABI_VERSION" +#endif diff --git a/gcc/testsuite/g++.dg/abi/mangle11.C b/gcc/testsuite/g++.dg/abi/mangle11.C index f7151171d30..a049a956671 100644 --- a/gcc/testsuite/g++.dg/abi/mangle11.C +++ b/gcc/testsuite/g++.dg/abi/mangle11.C @@ -1,4 +1,4 @@ -// { dg-options "-Wabi" } +// { dg-options "-Wabi -fabi-version=1" } template <typename Q> void f (typename Q::X) {} diff --git a/gcc/testsuite/g++.dg/abi/mangle12.C b/gcc/testsuite/g++.dg/abi/mangle12.C index 772b58b7a39..406a13b3f79 100644 --- a/gcc/testsuite/g++.dg/abi/mangle12.C +++ b/gcc/testsuite/g++.dg/abi/mangle12.C @@ -1,4 +1,4 @@ -// { dg-options "-Wabi" } +// { dg-options "-Wabi -fabi-version=1" } template <template <typename> class Q> void f (typename Q<int>::X) {} diff --git a/gcc/testsuite/g++.dg/abi/mangle14.C b/gcc/testsuite/g++.dg/abi/mangle14.C index 8e2bfddde76..1205ac45fe0 100644 --- a/gcc/testsuite/g++.dg/abi/mangle14.C +++ b/gcc/testsuite/g++.dg/abi/mangle14.C @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-Wabi" } +// { dg-options "-Wabi -fabi-version=1" } struct A { template <typename T> int f (); diff --git a/gcc/testsuite/g++.dg/abi/mangle17.C b/gcc/testsuite/g++.dg/abi/mangle17.C index 6f8e387e1d7..994da88edca 100644 --- a/gcc/testsuite/g++.dg/abi/mangle17.C +++ b/gcc/testsuite/g++.dg/abi/mangle17.C @@ -1,4 +1,4 @@ -// { dg-options "-Wabi" } +// { dg-options "-Wabi -fabi-version=1" } enum E { e = 3 }; diff --git a/gcc/testsuite/g++.dg/abi/vbase10.C b/gcc/testsuite/g++.dg/abi/vbase10.C index 3c110be7188..7683250ea5d 100644 --- a/gcc/testsuite/g++.dg/abi/vbase10.C +++ b/gcc/testsuite/g++.dg/abi/vbase10.C @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-Wabi" } +// { dg-options "-Wabi -fabi-version=1" } struct A { virtual void f(); char c1; }; struct B { B(); char c2; }; diff --git a/gcc/testsuite/g++.dg/abi/vbase14.C b/gcc/testsuite/g++.dg/abi/vbase14.C index 99290b85720..320d5ba77dc 100644 --- a/gcc/testsuite/g++.dg/abi/vbase14.C +++ b/gcc/testsuite/g++.dg/abi/vbase14.C @@ -1,4 +1,4 @@ -// { dg-options "-Wabi" } +// { dg-options "-Wabi -fabi-version=1" } struct E1 {}; struct E2 : public E1 {}; // { dg-warning "layout" } diff --git a/gcc/testsuite/g++.dg/template/qualttp17.C b/gcc/testsuite/g++.dg/template/qualttp17.C index 4766c53847d..4d79c9a7653 100644 --- a/gcc/testsuite/g++.dg/template/qualttp17.C +++ b/gcc/testsuite/g++.dg/template/qualttp17.C @@ -1,7 +1,7 @@ // Copyright (C) 2001 Free Software Foundation // Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> // { dg-do compile } -// { dg-options "-fno-inline" } +// { dg-options "-fno-inline -fabi-version=1" } struct A { |