re PR c++/196 (problem with: namespace N { class N {...}; })

cp:
	PR c++/196
	* cp/parse.y (bad_parm): Better diagnostic when given a SCOPE_REF.
testsuite:
	* g++.dg/eh/ctor1.C: New test.
	* g++.dg/other/error2.C: New test.

From-SVN: r48317
This commit is contained in:
Nathan Sidwell 2001-12-26 20:33:37 +00:00 committed by Nathan Sidwell
parent 8a723db2df
commit 7d8e83691e
5 changed files with 76 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2001-12-26 Nathan Sidwell <nathan@codesourcery.com>
PR c++/196
* cp/parse.y (bad_parm): Better diagnostic when given a SCOPE_REF.
2001-12-24 Nathan Sidwell <nathan@codesourcery.com>
PR c++/160

View File

@ -3766,11 +3766,16 @@ bad_parm:
}
| notype_declarator
{
error ("type specifier omitted for parameter");
if (TREE_CODE ($$) == SCOPE_REF
&& (TREE_CODE (TREE_OPERAND ($$, 0)) == TEMPLATE_TYPE_PARM
|| TREE_CODE (TREE_OPERAND ($$, 0)) == BOUND_TEMPLATE_TEMPLATE_PARM))
error (" perhaps you want `typename %E' to make it a type", $$);
if (TREE_CODE ($$) == SCOPE_REF)
{
if (TREE_CODE (TREE_OPERAND ($$, 0)) == TEMPLATE_TYPE_PARM
|| TREE_CODE (TREE_OPERAND ($$, 0)) == BOUND_TEMPLATE_TEMPLATE_PARM)
error ("`%E' is not a type, use `typename %E' to make it one", $$);
else
error ("no type `%D' in `%T'", TREE_OPERAND ($$, 1), TREE_OPERAND ($$, 0));
}
else
error ("type specifier omitted for parameter `%E'", $$);
$$ = build_tree_list (integer_type_node, $$);
}
;

View File

@ -1,3 +1,8 @@
2001-12-26 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/eh/ctor1.C: New test.
* g++.dg/other/error2.C: New test.
2001-12-24 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/other/init2.C: New test.

View File

@ -0,0 +1,42 @@
// { dg-do run }
// Copyright (C) 2001 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 26 Dec 2001 <nathan@nathan@codesourcery.com>
// PR 411
bool was_f_in_Bar_destroyed=false;
struct Foo
{
~Foo()
{
was_f_in_Bar_destroyed=true;
}
};
struct Bar
{
~Bar()
{
throw 1;
}
Foo f;
};
int main()
{
try
{
Bar f;
}
catch(int i)
{
if(was_f_in_Bar_destroyed)
{
return 0;
}
}
return 1;
}

View File

@ -0,0 +1,14 @@
// { dg-do compile }
// Copyright (C) 2001 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 26 Dec 2001 <nathan@nathan@codesourcery.com>
// PR 196. Misleading diagnostic
namespace N
{
class B { friend void operator>>(int, class B); };
class N { friend void operator>>(int,class N); };
}
void N::operator>>(int, N::B) // { dg-error "no type `B' in `N::N'" "" }
{ } // { dg-error "" "" }