From 57702a80e805859260710953242bf87c08f5c410 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Tue, 23 Dec 2003 16:53:53 +0000 Subject: [PATCH] c-common.c (flag_abi_version): Default to 2. * 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. From-SVN: r74973 --- gcc/ChangeLog | 7 +++++++ gcc/c-common.c | 4 +++- gcc/c-cppbuiltin.c | 18 +++++++++++++++++- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/cp-lang.c | 4 +++- gcc/cp/cp-tree.h | 1 - gcc/cp/decl2.c | 15 --------------- gcc/doc/invoke.texi | 11 ++++++----- gcc/testsuite/ChangeLog | 17 +++++++++++++++++ gcc/testsuite/g++.dg/abi/bitfield5.C | 2 +- gcc/testsuite/g++.dg/abi/bitfield7.C | 2 +- gcc/testsuite/g++.dg/abi/dtor2.C | 2 +- gcc/testsuite/g++.dg/abi/macro0.C | 5 +++++ gcc/testsuite/g++.dg/abi/macro1.C | 5 +++++ gcc/testsuite/g++.dg/abi/macro2.C | 5 +++++ gcc/testsuite/g++.dg/abi/mangle11.C | 2 +- gcc/testsuite/g++.dg/abi/mangle12.C | 2 +- gcc/testsuite/g++.dg/abi/mangle14.C | 2 +- gcc/testsuite/g++.dg/abi/mangle17.C | 2 +- gcc/testsuite/g++.dg/abi/vbase10.C | 2 +- gcc/testsuite/g++.dg/abi/vbase14.C | 2 +- gcc/testsuite/g++.dg/template/qualttp17.C | 2 +- 22 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 gcc/testsuite/g++.dg/abi/macro0.C create mode 100644 gcc/testsuite/g++.dg/abi/macro1.C create mode 100644 gcc/testsuite/g++.dg/abi/macro2.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 768fce9b9c3c..86135fbff0ee 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-12-23 Mark Mitchell + + * 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 * config/rs6000/rs6000.md: Change many instances of '! diff --git a/gcc/c-common.c b/gcc/c-common.c index ce90433c8554..9cdd14410987 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 19a9cf481069..739a34224b1e 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 >= + + 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 69cbbed94b36..9d13f3da0edc 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2003-12-23 Mark Mitchell + + * 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 PR c++/13387 diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index 94cf4623ee83..f1f5eedcc548 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 ba9770515d41..91e38f48223c 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 92b661d72989..4068826a9a9a 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 012ec0436182..db5c0b0ffdef 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 985f9260c769..7c5ee7fa3cb9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,20 @@ +2003-12-23 Mark Mitchell + + * 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 PR c/11995 diff --git a/gcc/testsuite/g++.dg/abi/bitfield5.C b/gcc/testsuite/g++.dg/abi/bitfield5.C index eed76e649e6e..e754f0ddf224 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 9868cfce1987..b5b656ffa477 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 f4a1336fefa4..6b89cc8eae05 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 000000000000..6c391e6891b3 --- /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 000000000000..871208da3ad5 --- /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 000000000000..9f0af9cff34b --- /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 f7151171d306..a049a9566713 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 void f (typename Q::X) {} diff --git a/gcc/testsuite/g++.dg/abi/mangle12.C b/gcc/testsuite/g++.dg/abi/mangle12.C index 772b58b7a39e..406a13b3f79f 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