Bootstrapped and regtested on x86_64-pc-linux-gnu, pushed to trunk as obvious.
-- >8 -- After r14-4796-g3e3d73ed5e85e7, tsubst_copy_and_build (now named tsubst_expr) no longer dispatches to tsubst for type trees, and callers have to do it themselves if appropriate. This patch makes some overlooked adjustments to Objective-C++-specific code paths. PR objc++/111920 gcc/cp/ChangeLog: * pt.cc (tsubst_expr) <case AT_ENCODE_EXPR>: Use tsubst instead of tsubst_expr. gcc/objcp/ChangeLog: * objcp-lang.cc (objcp_tsubst_expr) <case CLASS_REFERENCE_EXPR>: Use tsubst instead of tsubst_expr for type operands. --- gcc/cp/pt.cc | 2 +- gcc/objcp/objcp-lang.cc | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 210c6cb9e4d..1c1c9313118 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -20261,7 +20261,7 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) op1 = TREE_OPERAND (t, 0); ++cp_unevaluated_operand; ++c_inhibit_evaluation_warnings; - op1 = tsubst_expr (op1, args, complain, in_decl); + op1 = tsubst (op1, args, complain, in_decl); --cp_unevaluated_operand; --c_inhibit_evaluation_warnings; RETURN (objc_build_encode_expr (op1)); diff --git a/gcc/objcp/objcp-lang.cc b/gcc/objcp/objcp-lang.cc index 5b04cd66290..ee39aece848 100644 --- a/gcc/objcp/objcp-lang.cc +++ b/gcc/objcp/objcp-lang.cc @@ -66,8 +66,14 @@ objcp_tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) RECURSE (TREE_OPERAND (t, 2)), NULL); case CLASS_REFERENCE_EXPR: - return objc_get_class_reference - (RECURSE (TREE_OPERAND (t, 0))); + { + tree ident = TREE_OPERAND (t, 0); + if (TYPE_P (ident)) + ident = tsubst (ident, args, complain, in_decl); + else + ident = RECURSE (ident); + return objc_get_class_reference (ident); + } default: break; -- 2.42.0.424.gceadf0f3cf