re PR c++/51640 (Misleading error if the type in the catch() is ambiguous)
/cp 2014-05-16 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51640 * parser.c (cp_parser_diagnose_invalid_type_name): Early return when cp_parser_lookup_name sets ambiguous_decls. /testsuite 2014-05-16 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51640 * g++.dg/parse/error54.C: New. From-SVN: r210521
This commit is contained in:
parent
f4e075e7d9
commit
54674a35bd
4 changed files with 40 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2014-05-16 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/51640
|
||||
* parser.c (cp_parser_diagnose_invalid_type_name): Early return
|
||||
when cp_parser_lookup_name sets ambiguous_decls.
|
||||
|
||||
2014-05-15 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* call.c (print_conversion_rejection): Use loc consistently.
|
||||
|
|
|
@ -2880,13 +2880,21 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser,
|
|||
tree scope, tree id,
|
||||
location_t location)
|
||||
{
|
||||
tree decl, old_scope;
|
||||
tree decl, old_scope, ambiguous_decls;
|
||||
cp_parser_commit_to_tentative_parse (parser);
|
||||
/* Try to lookup the identifier. */
|
||||
old_scope = parser->scope;
|
||||
parser->scope = scope;
|
||||
decl = cp_parser_lookup_name_simple (parser, id, location);
|
||||
decl = cp_parser_lookup_name (parser, id, none_type,
|
||||
/*is_template=*/false,
|
||||
/*is_namespace=*/false,
|
||||
/*check_dependency=*/true,
|
||||
&ambiguous_decls, location);
|
||||
parser->scope = old_scope;
|
||||
if (ambiguous_decls)
|
||||
/* If the lookup was ambiguous, an error will already have
|
||||
been issued. */
|
||||
return;
|
||||
/* If the lookup found a template-name, it means that the user forgot
|
||||
to specify an argument list. Emit a useful error message. */
|
||||
if (TREE_CODE (decl) == TEMPLATE_DECL)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-05-16 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/51640
|
||||
* g++.dg/parse/error54.C: New.
|
||||
|
||||
2014-05-16 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/60969
|
||||
|
|
19
gcc/testsuite/g++.dg/parse/error54.C
Normal file
19
gcc/testsuite/g++.dg/parse/error54.C
Normal file
|
@ -0,0 +1,19 @@
|
|||
// PR c++/51640
|
||||
|
||||
class ex {};
|
||||
|
||||
namespace t
|
||||
{
|
||||
class ex2 : public ex {};
|
||||
}
|
||||
|
||||
class ex2 : public ex {};
|
||||
|
||||
void bar()
|
||||
{
|
||||
using namespace t;
|
||||
|
||||
try {
|
||||
} catch (ex2&) { // { dg-error "reference to 'ex2' is ambiguous" }
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue