On Mon, 8 Dec 2025, Egas Ribeiro wrote:

> TARGET_EXPR represents semantic temporary objects and is deliberately
> not handled by tsubst routines, which expect syntactic templated trees.
> Add a comment and gcc_unreachable to make this explicit.
> 
> gcc/cp/ChangeLog:
> 
>       * pt.cc (tsubst_expr): Add TARGET_EXPR case with explanatory
>       comment and gcc_unreachable.

Pushed as r16-5970-g24efdb0974e19f.  I'm glad we finally got around to
documenting this :)

> 
> Signed-off-by: Egas Ribeiro <[email protected]>
> ---
>  gcc/cp/pt.cc | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
> index 7a019d33bda..339519bbb51 100644
> --- a/gcc/cp/pt.cc
> +++ b/gcc/cp/pt.cc
> @@ -22561,6 +22561,11 @@ tsubst_expr (tree t, tree args, tsubst_flags_t 
> complain, tree in_decl)
>        in response to the saved STMT_IS_FULL_EXPR_P setting.  */
>        gcc_unreachable ();
>  
> +    case TARGET_EXPR:
> +      /* TARGET_EXPR represents temporary objects and should not appear in
> +         templated trees. */
> +      gcc_unreachable ();
> +
>      case OFFSET_REF:
>        {
>       /* We should only get here for an OFFSET_REF like A::m; a .* in a
> -- 
> 2.52.0
> 
> 

Reply via email to