On Tue, Jan 16, 2018 at 4:40 PM, Paolo Carlini <paolo.carl...@oracle.com> wrote: > On 16/01/2018 22:35, Jason Merrill wrote: >> On Tue, Jan 16, 2018 at 3:32 PM, Paolo Carlini <paolo.carl...@oracle.com> >> wrote: >>> >>> thus I figured out what was badly wrong in my first try: I misread >>> ensure_literal_type_for_constexpr_object and missed that it can return >>> NULL_TREE without emitting an hard error. Thus my first try even caused >>> miscompilations :( Anyway, when DECL_DECLARED_CONSTEXPR_P is true we are >>> safe and indeed we want to clear it as matter of error recovery. Then, in >>> this safe case the only change in the below is returning early, thus >>> avoiding any internal inconsistencies later and also the redundant / >>> misleading diagnostic which I already mentioned. >> >> I can't see how this could be right. In the cases where we don't give >> an error (e.g. because we're dealing with an instantiation of a >> variable template) there is no error, so we need to proceed with the >> rest of cp_finish_decl as normal. > > The cases where we don't give an error all fall under > DECL_DECLARED_CONSTEXPR_P == false, thus aren't affected at all.
Ah, true. Though that's a bit subtle; maybe change ensure_... to return error_mark_node in the error case? Jason