re PR c++/15967 (ICE on ambiguous operator new in class hierarchy)
PR c++/15967 * search.c (lookup_field): Propagate the ambiguity list. (lookup_fnfields): Likewise. PR c++/15967 * g++.dg/lookup/crash3.C: New test. From-SVN: r83158
This commit is contained in:
parent
4e0f4df508
commit
c566721f93
4 changed files with 32 additions and 4 deletions
|
@ -1,3 +1,9 @@
|
|||
2004-06-14 Giovanni Bajo <giovannibajo@gcc.gnu.org>
|
||||
|
||||
PR c++/15967
|
||||
* search.c (lookup_field): Propagate the ambiguity list.
|
||||
(lookup_fnfields): Likewise.
|
||||
|
||||
2004-06-14 Giovanni Bajo <giovannibajo@gcc.gnu.org>
|
||||
|
||||
PR c++/15947
|
||||
|
|
|
@ -1332,8 +1332,9 @@ lookup_field (tree xbasetype, tree name, int protect, bool want_type)
|
|||
{
|
||||
tree rval = lookup_member (xbasetype, name, protect, want_type);
|
||||
|
||||
/* Ignore functions. */
|
||||
if (rval && BASELINK_P (rval))
|
||||
/* Ignore functions, but propagate the ambiguity list. */
|
||||
if (!error_operand_p (rval)
|
||||
&& (rval && BASELINK_P (rval)))
|
||||
return NULL_TREE;
|
||||
|
||||
return rval;
|
||||
|
@ -1347,8 +1348,9 @@ lookup_fnfields (tree xbasetype, tree name, int protect)
|
|||
{
|
||||
tree rval = lookup_member (xbasetype, name, protect, /*want_type=*/false);
|
||||
|
||||
/* Ignore non-functions. */
|
||||
if (rval && !BASELINK_P (rval))
|
||||
/* Ignore non-functions, but propagate the ambiguity list. */
|
||||
if (!error_operand_p (rval)
|
||||
&& (rval && !BASELINK_P (rval)))
|
||||
return NULL_TREE;
|
||||
|
||||
return rval;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2004-06-14 Giovanni Bajo <giovannibajo@gcc.gnu.org>
|
||||
|
||||
PR c++/15967
|
||||
* g++.dg/lookup/crash3.C: New test.
|
||||
|
||||
2004-06-14 Giovanni Bajo <giovannibajo@gcc.gnu.org>
|
||||
|
||||
PR c++/15947
|
||||
|
|
15
gcc/testsuite/g++.dg/lookup/crash3.C
Normal file
15
gcc/testsuite/g++.dg/lookup/crash3.C
Normal file
|
@ -0,0 +1,15 @@
|
|||
// { dg-do compile }
|
||||
// Contributed by Wolfgang Wieser <wwieser at gmx dot de>
|
||||
// PR c++/15967: ICE with ambiguous operator new
|
||||
|
||||
typedef unsigned int size_t;
|
||||
|
||||
struct A { void *operator new(size_t s){} }; // { dg-error "operator new" }
|
||||
struct B { void *operator new(size_t s){} }; // { dg-error "operator new" }
|
||||
|
||||
struct C : A,B {};
|
||||
|
||||
int crash()
|
||||
{
|
||||
C *c=new C(); // { dg-error "ambiguous" }
|
||||
}
|
Loading…
Add table
Reference in a new issue