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
This commit is contained in:
parent
1b4d752a64
commit
88bf1faf57
@ -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
|
||||
|
21
gcc/testsuite/g++.old-deja/g++.other/ambig2.C
Normal file
21
gcc/testsuite/g++.old-deja/g++.other/ambig2.C
Normal file
@ -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
|
||||
}
|
45
gcc/testsuite/g++.old-deja/g++.other/cond5.C
Normal file
45
gcc/testsuite/g++.old-deja/g++.other/cond5.C
Normal file
@ -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
|
||||
|
||||
}
|
30
gcc/testsuite/g++.old-deja/g++.other/lookup16.C
Normal file
30
gcc/testsuite/g++.old-deja/g++.other/lookup16.C
Normal file
@ -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;
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue
Block a user