Re: [PATCH v2] c++: resolvedness of resolve_nondeduced_context result [PR126406]

Jason Merrill <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
On 7/30/26 3:00 PM, Patrick Palka wrote:
> Changes in v2:
>    - Outright revert r16-5967, and instead fix PR119343 more directly
>      for sake of backports.
> 
> Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look
> OK for trunk/16?
> 
> -- >8 --
> 
> In r16-5967-gbae0ed69e1862a we removed the mark_used call from
> resolve_nondeduced_context under the rationale that it should be
> the callers' responsiblity to do so.c
> 
> Removing this call however now means that resolve_nondeduced_context
> could return a specialization whose type is not yet fully resolved
> (i.e. has an uninstantiated noexcept or undeduced return type), and
> callers that immediately inspect TREE_TYPE of the result (such as
> standard_conversion and build_conditional_expr) now misbehave.
> 
> In light of such callers, this patch reverts r16-5967 and more
> directly fixes the PR119343 bug by just propagating error_mark_node
> from resolve_nondeduced_context during convert_to_void.
> 
> @@ -1573,7 +1573,8 @@ convert_to_void (tree expr, impl_conv_void implicit, tsubst_flags_t complain)
>       default:;
>       }
>     expr = resolve_nondeduced_context (expr, complain);
> -  if (!mark_single_function (expr, complain))
> +  if (expr == error_mark_node
> +      || !mark_single_function (expr, complain))

I still don't understand why this makes a difference, given that 
mark_single_function has

>   if (expr == error_mark_node)
>     return false;

so for expr == error_mark_node it should return false, and we should 
already return error_mark_node?

Jason
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.