From 569c1d8ba0fc88c3820b848851c9e92d5b2e4a58 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Mon, 24 May 1999 04:24:30 +0000 Subject: [PATCH] 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 --- gcc/testsuite/ChangeLog | 9 ++ gcc/testsuite/g++.old-deja/g++.ext/anon1.C | 2 + gcc/testsuite/g++.old-deja/g++.other/anon3.C | 85 +++++++++++++++++++ gcc/testsuite/g++.old-deja/g++.other/anon4.C | 16 ++++ .../g++.old-deja/g++.robertl/eb131.C | 2 +- 5 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/anon3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/anon4.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f5fea15dbe1..d972e01e940 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +1999-05-24 Nathan Sidwell + + * 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 c2a6d49ea00..8ec35801817 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 00000000000..09d44bc7506 --- /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 + +// 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 00000000000..cace54456c8 --- /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 + +// 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 d966fd9c01f..1768dd09063 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() -- 2.30.2