summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2003-12-23 16:53:53 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2003-12-23 16:53:53 +0000
commit26785ec8d2a7c04eb8c0a8a44c9fec5515c2e64b (patch)
tree730fb1dd5cb47c7638fd2ccd44d2e5ecb188026c
parentcadce113723715a4985d8ea3925ac95c66cf1076 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/c-common.c4
-rw-r--r--gcc/c-cppbuiltin.c18
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/cp-lang.c4
-rw-r--r--gcc/cp/cp-tree.h1
-rw-r--r--gcc/cp/decl2.c15
-rw-r--r--gcc/doc/invoke.texi11
-rw-r--r--gcc/testsuite/ChangeLog17
-rw-r--r--gcc/testsuite/g++.dg/abi/bitfield5.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/bitfield7.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/dtor2.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/macro0.C5
-rw-r--r--gcc/testsuite/g++.dg/abi/macro1.C5
-rw-r--r--gcc/testsuite/g++.dg/abi/macro2.C5
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle11.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle12.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle14.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle17.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/vbase10.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/vbase14.C2
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp17.C2
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
{