OK.
On Thu, Mar 23, 2017 at 3:07 PM, Paolo Carlini <paolo.carl...@oracle.com> wrote: > 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. > > ////////////////// >