Commit 88bf1faf by Nathan Sidwell Committed by Nathan Sidwell

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
parent 1b4d752a
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
......
// 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
}
// 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
}
// 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;
};
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment