This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi,this ICE on invalid code isn't a regression, thus a patch probably doesn't qualify for Stage 4, but IMHO I made good progress on it and I'm sending what I have now anyway... The ICE happens during error recovery after a sensible diagnostic for the first declaration in:
auto* foo() { return 0; } auto* foo(); After the error, finish_function does: apply_deduced_return_type (fndecl, void_type_node); fntype = TREE_TYPE (fndecl);which then is inconsistent with the auto* return type of the second declaration and leads to an ICE in merge_types (which duplicate_decls thought was safe to call because types_match is true (evidently: decls_match uses fndecl_declared_return_type)). Thus, in terms of error recovery, I think that in cases like the one at issue it makes sense not to replace auto* after the error and leave the return type untouched: certainly the below passes testing and avoids ICEing on the testcase at issue and a variant of it.
Thanks, Paolo. //////////////////
Attachment:
patch_80145
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |