From e20eae6a8dd495f17a867855e384e6cbea99d61f Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Wed, 12 Jun 2013 14:03:28 +0000 Subject: [PATCH] re PR c++/42021 (Misleading error message when inherited typedefs cause ambiguity) 2013-06-12 Paolo Carlini PR c++/42021 * parser.c (cp_parser_nested_name_specifier_opt): Avoid emitting again diagnostic already emitted by cp_parser_lookup_name. From-SVN: r200013 --- gcc/cp/ChangeLog | 10 ++++++++-- gcc/cp/parser.c | 14 ++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 144f1fc4edb..c8a9e127963 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,8 +1,14 @@ +2013-06-12 Paolo Carlini + + PR c++/42021 + * parser.c (cp_parser_nested_name_specifier_opt): Avoid emitting + again diagnostic already emitted by cp_parser_lookup_name. + 2013-06-11 Jan Hubicka PR c++/57551 - * cp/pt.c (mark_decl_instantiated): Do not export explicit instantiations - of anonymous namespace templates. + * cp/pt.c (mark_decl_instantiated): Do not export explicit + instantiations of anonymous namespace templates. 2013-06-10 Jason Merrill diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 319da218356..7b4c358d533 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -5230,10 +5230,16 @@ cp_parser_nested_name_specifier_opt (cp_parser *parser, decl); else if (ambiguous_decls) { - error_at (token->location, - "reference to %qD is ambiguous", - token->u.value); - print_candidates (ambiguous_decls); + // cp_parser_lookup_name has the same diagnostic, + // thus make sure to emit it almost once. + if (cp_parser_uncommitted_to_tentative_parse_p + (parser)) + { + error_at (token->location, + "reference to %qD is ambiguous", + token->u.value); + print_candidates (ambiguous_decls); + } decl = error_mark_node; } else -- 2.30.2