diff mbox

Fix PR c++/21802 (two-stage name lookup fails for operators)

Message ID alpine.DEB.2.20.9.1512161621280.3805@idea
State New
Headers show

Commit Message

Patrick Palka Dec. 16, 2015, 9:31 p.m. UTC
On Wed, 16 Dec 2015, Michael Matz wrote:

> Hi,
>
> On Mon, 14 Dec 2015, Patrick Palka wrote:
>
>>>>>> This should use cp_tree_operand_length.
>>>> Hmm, I don't immediately see how I can use this function here.  It
>>>> expects a tree but I dont have an appropriate tree to give to it, only a
>>>> tree_code.
>>>
>>> True.  So let's introduce cp_tree_code_length next to cp_tree_operand_length.
>>>
>>> Jason
>>>
>>>
>>
>> Like this?  Incremental diff followed by patch v4:
>
> Not my turf, but if I may make a suggestion: please use the new function
> in the old one instead of duplicating the implementation.

The implementation is not exactly a duplicate since the old function
returns TREE_OPERAND_LENGTH in the default case and the new function
returns TREE_CODE_LENGTH in the default case.

It's still doable though. Defining one in terms of the other would look
like this.  Is this patch OK to commit after testing?

-- 8< --

Subject: [PATCH] Avoid code duplication in cp_tree_[operand|code]_length

gcc/cp/ChangeLog:

 	* tree.c (cp_tree_operand_length): Define in terms of
 	cp_tree_code_length.
---
  gcc/cp/tree.c | 19 +++----------------
  1 file changed, 3 insertions(+), 16 deletions(-)

Comments

Jason Merrill Dec. 16, 2015, 9:33 p.m. UTC | #1
Looks good.

Jason
diff mbox

Patch

diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 0c0987d..ae176d0 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -4427,23 +4427,10 @@  cp_tree_operand_length (const_tree t)
  {
    enum tree_code code = TREE_CODE (t);

-  switch (code)
-    {
-    case PREINCREMENT_EXPR:
-    case PREDECREMENT_EXPR:
-    case POSTINCREMENT_EXPR:
-    case POSTDECREMENT_EXPR:
-      return 1;
+  if (TREE_CODE_CLASS (code) == tcc_vl_exp)
+    return VL_EXP_OPERAND_LENGTH (t);

-    case ARRAY_REF:
-      return 2;
-
-    case EXPR_PACK_EXPANSION:
-      return 1;
-
-    default:
-      return TREE_OPERAND_LENGTH (t);
-    }
+  return cp_tree_code_length (code);
  }

  /* Like cp_tree_operand_length, but takes a tree_code CODE.  */