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:
Nathan Sidwell 1999-09-02 09:23:14 +00:00 committed by Nathan Sidwell
parent 1b4d752a64
commit 88bf1faf57
4 changed files with 102 additions and 0 deletions

View File

@ -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

View 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
}

View 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
}

View 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;
};
};