This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/84349] [6/7/8 Regression] ICE with auto in function cast
- From: "msebor at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 16 Feb 2018 02:28:42 +0000
- Subject: [Bug c++/84349] [6/7/8 Regression] ICE with auto in function cast
- Auto-submitted: auto-generated
- References: <bug-84349-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84349
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to work| |4.8.4
Known to fail| |4.9.4, 5.5.0, 6.4.0, 7.2.0,
| |8.0
--- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> ---
A slightly simpler test case:
void *p = (int(*)(auto))0;
The bug seems to be that the auto isn't rejected in this context (namespace
scope). The same initializer is rejected in local scope.
Accepting it in an initializer expression results in incrementing the
processing_template_decl counter in the test case from its initial value of
zero to 1. The counter doesn't get decremented back to zero which then
triggers the unpaired call to finish_lambda_scope() below:
if (!member_p && processing_template_decl)
start_lambda_scope (decl);
initializer = cp_parser_initializer (parser,
&is_direct_init,
&is_non_constant_init);
if (!member_p && processing_template_decl)
finish_lambda_scope ();
AFAICS, the problem is somewhere in cp_parser_decl_specifier_seq() that creates
a decl_specifiers.type for the initializer at global scope for which
type_uses_auto() returns null.