diff options
author | Nathan Sidwell <nathan@acm.org> | 1999-09-02 09:23:14 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 1999-09-02 09:23:14 +0000 |
commit | 88bf1faf57dae2fd38f3fb152a8ed5b2aae3a4a0 (patch) | |
tree | 49c09b3f712d3ec6be746b6889c32d3202cbbafb | |
parent | 1b4d752a6422fad640ac6c18ad49a424b02f4849 (diff) | |
download | gcc-88bf1faf57dae2fd38f3fb152a8ed5b2aae3a4a0.zip gcc-88bf1faf57dae2fd38f3fb152a8ed5b2aae3a4a0.tar.gz gcc-88bf1faf57dae2fd38f3fb152a8ed5b2aae3a4a0.tar.bz2 |
ambig2.C: New test.
* g++.old-deja/g++.other/ambig2.C: New test.
* g++.old-deja/g++.other/cond5.C: New test.
* g++.old-deja/g++.other/lookup16.C: New test.
From-SVN: r29057
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/ambig2.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/cond5.C | 45 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/lookup16.C | 30 |
4 files changed, 102 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d005926..2bf872d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +Thu Sep 02 09:27:34 BST 1999 Nathan Sidwell <nathan@acm.org> + + * g++.old-deja/g++.other/ambig2.C: New test. + * g++.old-deja/g++.other/cond5.C: New test. + * g++.old-deja/g++.other/lookup16.C: New test. + Thu Sep 2 01:17:51 1999 Marc Espie <espie@cvs.openbsd.org> * gcc.dg/980414-1.c: Fix assembler syntax to work with old diff --git a/gcc/testsuite/g++.old-deja/g++.other/ambig2.C b/gcc/testsuite/g++.old-deja/g++.other/ambig2.C new file mode 100644 index 0000000..a8463ab --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/ambig2.C @@ -0,0 +1,21 @@ +// Build don't link: +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 29 Aug 1999 <nathan@acm.org> + +// We should spot all ambiguities + +struct A {int m;}; +struct B : A { int m; }; +struct C : A { int m; }; +struct D0 : virtual B, virtual C { int m; }; +struct D1 : virtual B, C { int m; }; +struct D2 : B, virtual C { int m; }; +struct D3 : B, C { int m; }; + +void fn(D0 *d0, D1 *d1, D2 *d2, D3 *d3) +{ + A *a0 = d0; // ERROR - A is an ambiguous base + A *a1 = d1; // ERROR - A is an ambiguous base + A *a2 = d2; // ERROR - A is an ambiguous base + A *a3 = d3; // ERROR - A is an ambiguous base +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/cond5.C b/gcc/testsuite/g++.old-deja/g++.other/cond5.C new file mode 100644 index 0000000..fb561e2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/cond5.C @@ -0,0 +1,45 @@ +// Build don't link: +// Special g++ Options: -W -pedantic -ansi + +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 1 Sep 1999 <nathan@acm.org> +// Derived from bug report from Gabriel Dos Reis +// <Gabriel.Dos-Reis@cmla.ens-cachan.fr> +// http://egcs.cygnus.com/ml/egcs-bugs/1999-03/msg00883.html + +// conditional exprs have some funny rules when one of the types is void. +// [expr.cond] 5.16, make sure we do the right things +// We have checks for mismatching enumerations, check we give them -- they had +// got lost due to changes in add_builtin_candidate and subsequent changes. + +struct X {}; +enum E1 {e1 = -1}; +enum E2 {e2 = -1}; +void f(int, ...); + +void fn(int i) +{ + double d; + int j; + + j = (i ? e1 : e2); // WARNING - mismatch + d = (i ? e1 : 1.0); // WARNING - mismatch + d = (i ? 1.0 : e2); // WARNING - mismatch + E1 e = (i ? e1 : e1); // ok + j = (i ? 1 : e2); // ok + j = (i ? e1 : 1); // ok + + j = (i ? throw X() : 1); // ok, int + j = (i ? 1 : throw X()); // ok, int + + (i ? throw X() : throw X()); // ok, void + + (i ? i : j) = 1; // ok, int & + (i ? throw X() : j) = 1; // ERROR - non lvalue + (i ? j : throw X()) = 1; // ERROR - non lvalue + (i ? throw X() : throw X()) = 1; // ERROR - invalid use of void + + (i ? (void)1 : i++); // WARNING - not a throw + (i ? i++ : (void)1); // WARNING - not a throw + +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/lookup16.C b/gcc/testsuite/g++.old-deja/g++.other/lookup16.C new file mode 100644 index 0000000..9cf8404 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/lookup16.C @@ -0,0 +1,30 @@ +// Build don't link: +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 25 Aug 1999 <nathan@acm.org> + +// typenames are not injected early enough, [basic.scope.pdecl]3.3.1/4 +// indicates this should compile. + +struct A { +}; + +struct B : A { + typedef A Parent; + struct F { + }; +}; + +struct C : B { + typedef B Parent; + struct G {}; + struct F : C::Parent::F { + typedef C::Parent::F Parent; + }; +}; + +struct D : B { + typedef B Parent; + struct F : D::Parent::F { + typedef D::Parent::F Parent; + }; +}; |