diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-09-23 09:22:17 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-09-23 09:22:17 +0000 |
commit | 221c4c52c37fe406e61c82361601c39ab4ec1241 (patch) | |
tree | 1a0a4c88a7ec146d17c908d2c4246c6c718372b8 /gcc/testsuite | |
parent | fefb85cc0369fd0d389260d2adb1090ebd58d71b (diff) | |
download | gcc-221c4c52c37fe406e61c82361601c39ab4ec1241.tar.gz |
* c-common.c (flag_abi_version): New variable.
* c-common.h (flag_abi_version): Declare it.
* c-opts.c (missing_arg): Add -fabi-version.
(c_common_decode_option): Process -fabi-version.
* doc/invoke.texi (-fabi-version): Document it.
(-Wabi): Add information about bit-fields in unions.
* cp/class.c (layout_virtual_bases): Do not round the size of the
type to a multiple of the alignment before laying out virtual bases.
(layout_class_type): Correct handling of bit-fields that are wider
than their type inside unions. Round the size of the type to a
even number of bytes when computing the size without virtual
bases.
* cp/cp-tree.h (abi_version_at_least): New macro.
* g++.dg/abi/bitfield6.C: New test.
* g++.dg/abi/bitfield7.C: New test.
* g++.dg/abi/bitfield8.C: New test.
* g++.dg/abi/vbase11.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57432 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/bitfield6.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/bitfield7.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/bitfield8.C | 20 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/vbase11.C | 12 |
5 files changed, 60 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 83843fef383..19d87b3e9dc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2002-09-23 Mark Mitchell <mark@codesourcery.com> + + * g++.dg/abi/bitfield6.C: New test. + * g++.dg/abi/bitfield7.C: New test. + * g++.dg/abi/bitfield8.C: New test. + * g++.dg/abi/vbase11.C: New test. + 2002-09-22 John David Anglin <dave@hiauly1.hia.nrc.ca> * gcc.dg/20020219-1.c: Add "-mdisable-indexing" option for target diff --git a/gcc/testsuite/g++.dg/abi/bitfield6.C b/gcc/testsuite/g++.dg/abi/bitfield6.C new file mode 100644 index 00000000000..50f76ab824b --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield6.C @@ -0,0 +1,14 @@ +// { dg-do run } +// { dg-options "-w -fabi-version=0" } + +#include <limits> + +union U { + int i: 4096; +}; + +int main () { + if (sizeof (U) * std::numeric_limits<unsigned char>::digits != 4096) + return 1; +} + diff --git a/gcc/testsuite/g++.dg/abi/bitfield7.C b/gcc/testsuite/g++.dg/abi/bitfield7.C new file mode 100644 index 00000000000..9868cfce198 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield7.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// { dg-options "-Wabi" } + +union U { // { dg-warning "ABI" } + int i: 4096; // { dg-warning "exceeds" } +}; + diff --git a/gcc/testsuite/g++.dg/abi/bitfield8.C b/gcc/testsuite/g++.dg/abi/bitfield8.C new file mode 100644 index 00000000000..8195fda631d --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/bitfield8.C @@ -0,0 +1,20 @@ +// { dg-do run { target i?86-*-* } } +// { dg-options "-fabi-version=0" } + +struct A { + virtual void f() {} + int f1 : 1; +}; + +struct B : public A { + int f2 : 31; + int f3 : 4; + int f4 : 3; +}; + +int main () +{ + if (sizeof (B) != 16) + return 1; +} + diff --git a/gcc/testsuite/g++.dg/abi/vbase11.C b/gcc/testsuite/g++.dg/abi/vbase11.C new file mode 100644 index 00000000000..375577365a3 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/vbase11.C @@ -0,0 +1,12 @@ +// { dg-do run { target i?86-*-* } } +// { dg-options "-fabi-version=0" } + +struct A { virtual void f(); char c1; }; +struct B { B(); char c2; }; +struct C : public A, public virtual B { }; + +int main () { + if (sizeof (C) != 8) + return 1; +} + |