From 80ddcb9c8f9b5a387f379e1db39bc6f3680bd52f Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Sun, 22 Oct 2023 16:13:33 -0400 Subject: objc++: type/expr tsubst conflation [PR111920] 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) : Use tsubst instead of tsubst_expr. gcc/objcp/ChangeLog: * objcp-lang.cc (objcp_tsubst_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 210c6cb..1c1c931 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 5b04cd6..ee39aec 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; -- cgit v1.1