diff options
author | Nathan Sidwell <nathan@acm.org> | 1999-05-24 04:24:30 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 1999-05-24 04:24:30 +0000 |
commit | 569c1d8ba0fc88c3820b848851c9e92d5b2e4a58 (patch) | |
tree | 87e9eb138b53b674dfa0e668e167b1aa204a6dec /gcc | |
parent | e97b5c125c43f264674253b0abe97499bf817c7d (diff) | |
download | gcc-569c1d8ba0fc88c3820b848851c9e92d5b2e4a58.zip gcc-569c1d8ba0fc88c3820b848851c9e92d5b2e4a58.tar.gz gcc-569c1d8ba0fc88c3820b848851c9e92d5b2e4a58.tar.bz2 |
anon3.C: New test.
* g++.old-deja/g++.other/anon3.C: New test.
* g++.old-deja/g++.other/anon4.C: New test.
* g++.old-deja/g++.ext/anon1.C: Inhibit -pedantic option.
* g++.old-deja/g++.g++.robertl/eb131.C/: Remove unrequired ERROR tag,
after downgrade to warning (cp/ChangeLog: 1999-05-20 Jason
Merrill).
From-SVN: r27120
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.ext/anon1.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/anon3.C | 85 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/anon4.C | 16 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.robertl/eb131.C | 2 |
5 files changed, 113 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f5fea15..d972e01 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +1999-05-24 Nathan Sidwell <nathan@acm.org> + + * g++.old-deja/g++.other/anon3.C: New test. + * g++.old-deja/g++.other/anon4.C: New test. + * g++.old-deja/g++.ext/anon1.C: Inhibit -pedantic option. + * g++.old-deja/g++.g++.robertl/eb131.C/: Remove unrequired ERROR tag, + after downgrade to warning (cp/ChangeLog: 1999-05-20 Jason + Merrill). + Mon May 24 00:01:52 1999 Jeffrey A Law (law@cygnus.com) * gcc.dg/990524-1.c: New test. diff --git a/gcc/testsuite/g++.old-deja/g++.ext/anon1.C b/gcc/testsuite/g++.old-deja/g++.ext/anon1.C index c2a6d49..8ec3580 100644 --- a/gcc/testsuite/g++.old-deja/g++.ext/anon1.C +++ b/gcc/testsuite/g++.old-deja/g++.ext/anon1.C @@ -1,3 +1,5 @@ +// Special g++ Options: + union U { struct { int i; int j; }; int a[2]; diff --git a/gcc/testsuite/g++.old-deja/g++.other/anon3.C b/gcc/testsuite/g++.old-deja/g++.other/anon3.C new file mode 100644 index 0000000..09d44bc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/anon3.C @@ -0,0 +1,85 @@ +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 20 May 1999 <nathan@acm.org> + +// Although anon unions cannot have user defined member functions +// [class.union/2]. They should have implicitly defined copy ctors and +// and the like [class.copy/4]. Make sure we generate one of the correct +// signature and that it works ok. + +extern "C" void abort(); + +struct A +{ + union + { + int a; + }; +}; +union B +{ + int a; +}; + +static A Ctor(A const &src) +{ + A result(src); // this should not cause a const violation + + result = src; // and neither should this + + return result; +} + +typedef __SIZE_TYPE__ size_t; + +void *operator new(size_t, void *ptr) +{ + return ptr; +} + +// check copy ctor and assignment for plain union +void check_union() +{ + B b1; + B b2; + + b1.a = 5; + b2.a = 6; + b2 = b1; + if(b2.a != 5) + abort(); + + b2.a = 6; + new (&b2) B(b1); + if(b2.a != 5) + abort(); + + return; +} + +// check copy ctor and assignment for class containing anon-union +void check_union_member() +{ + A a1; + A a2; + + a1.a = 5; + a2.a = 6; + a2 = a1; + if(a2.a != 5) + abort(); + + a2.a = 6; + new (&a2) A(a1); + if(a2.a != 5) + abort(); + + return; +} + +int main() +{ + check_union(); + check_union_member(); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/anon4.C b/gcc/testsuite/g++.old-deja/g++.other/anon4.C new file mode 100644 index 0000000..cace544 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/anon4.C @@ -0,0 +1,16 @@ +// Build don't link: + +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 20 May 1999 <nathan@acm.org> + +// Anon unions cannot have user defined member functions +// [class.union/2]. Make sure we spot that. + + +struct A +{ + union + { + void bad(); + }; // ERROR - anon union cannot have member fns +}; diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb131.C b/gcc/testsuite/g++.old-deja/g++.robertl/eb131.C index d966fd9..1768dd0 100644 --- a/gcc/testsuite/g++.old-deja/g++.robertl/eb131.C +++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb131.C @@ -10,7 +10,7 @@ struct a { void bar( double ); void bar( float ); - void foo( void (a::*member)(float) ); // ERROR - candidate + void foo( void (a::*member)(float) ); }; a::a() |