From a73c128df6e149c36940240f2b2198f9732ab6c7 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 9 Mar 2022 14:35:10 -0700 Subject: [PATCH] Remove eval_op_concat eval_op_concat has code to search for an operator overload of BINOP_CONCAT. However, the operator overloading code is specific to C++, which does not have this operator. And, binop_types_user_defined_p rejects this case right at the start, and value_x_binop does not handle this case. I think this code has been dead for a very long time. This patch removes it and hoists the remaining call into concatenation::evaluate, removing eval_op_concat entirely. --- gdb/eval.c | 12 ------------ gdb/expop.h | 6 +----- gdb/valarith.c | 2 +- 3 files changed, 2 insertions(+), 18 deletions(-) diff --git a/gdb/eval.c b/gdb/eval.c index b7b8915fa89..266a4f7699f 100644 --- a/gdb/eval.c +++ b/gdb/eval.c @@ -1106,18 +1106,6 @@ eval_op_objc_selector (struct type *expect_type, struct expression *exp, lookup_child_selector (exp->gdbarch, sel)); } -/* Helper function that implements the body of BINOP_CONCAT. */ - -struct value * -eval_op_concat (struct type *expect_type, struct expression *exp, - enum noside noside, struct value *arg1, struct value *arg2) -{ - if (binop_user_defined_p (BINOP_CONCAT, arg1, arg2)) - return value_x_binop (arg1, arg2, BINOP_CONCAT, OP_NULL, noside); - else - return value_concat (arg1, arg2); -} - /* A helper function for TERNOP_SLICE. */ struct value * diff --git a/gdb/expop.h b/gdb/expop.h index 1592568a857..d903ab0bb7e 100644 --- a/gdb/expop.h +++ b/gdb/expop.h @@ -83,10 +83,6 @@ extern struct value *eval_op_member (struct type *expect_type, struct expression *exp, enum noside noside, struct value *arg1, struct value *arg2); -extern struct value *eval_op_concat (struct type *expect_type, - struct expression *exp, - enum noside noside, - struct value *arg1, struct value *arg2); extern struct value *eval_op_add (struct type *expect_type, struct expression *exp, enum noside noside, @@ -1158,7 +1154,7 @@ public: = std::get<0> (m_storage)->evaluate_with_coercion (exp, noside); value *rhs = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside); - return eval_op_concat (expect_type, exp, noside, lhs, rhs); + return value_concat (lhs, rhs); } enum exp_opcode opcode () const override diff --git a/gdb/valarith.c b/gdb/valarith.c index e13db10ab55..791c1cd9a06 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -252,7 +252,7 @@ int binop_types_user_defined_p (enum exp_opcode op, struct type *type1, struct type *type2) { - if (op == BINOP_ASSIGN || op == BINOP_CONCAT) + if (op == BINOP_ASSIGN) return 0; type1 = check_typedef (type1); -- 2.30.2