Skip to content
Snippets Groups Projects
Commit 0999f260 authored by Marek Polacek's avatar Marek Polacek
Browse files

c++: Fix ICE-on-invalid with -Wvexing-parse [PR97881]

This invalid (?) code broke my assumption that if decl_specifiers->type
is null, there must be any type-specifiers.  Turn the assert into an if
to fix this crash.

gcc/cp/ChangeLog:

	PR c++/97881
	* parser.c (warn_about_ambiguous_parse): Only assume "int" if we
	actually saw any type-specifiers.

gcc/testsuite/ChangeLog:

	PR c++/97881
	* g++.dg/warn/Wvexing-parse9.C: New test.
parent 1cb50c0a
No related branches found
No related tags found
No related merge requests found
...@@ -20790,13 +20790,12 @@ warn_about_ambiguous_parse (const cp_decl_specifier_seq *decl_specifiers, ...@@ -20790,13 +20790,12 @@ warn_about_ambiguous_parse (const cp_decl_specifier_seq *decl_specifiers,
if (same_type_p (type, void_type_node)) if (same_type_p (type, void_type_node))
return; return;
} }
else if (decl_specifiers->any_type_specifiers_p)
/* Code like long f(); will have null ->type. If we have any
type-specifiers, pretend we've seen int. */
type = integer_type_node;
else else
{ return;
/* Code like long f(); will have null ->type. If we have any
type-specifiers, pretend we've seen int. */
gcc_checking_assert (decl_specifiers->any_type_specifiers_p);
type = integer_type_node;
}
   
auto_diagnostic_group d; auto_diagnostic_group d;
location_t loc = declarator->u.function.parens_loc; location_t loc = declarator->u.function.parens_loc;
// PR c++/97881
// { dg-do compile }
void
cb ()
{
volatile _Atomic (int) a1; // { dg-error "" }
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment