[PATCH] tree: Fix up get_narrower [PR94724]

Thomas Schwinge thomas@codesourcery.com
Thu May 7 12:45:29 GMT 2020


Hi!

On 2020-04-23T21:04:35+0200, Richard Biener <rguenther@suse.de> wrote:
> On April 23, 2020 8:19:55 PM GMT+02:00, Jakub Jelinek <jakub@redhat.com> wrote:
>>[patch] instead uses an auto_vec and builds them in the reverse
>>order
>>so when they are built, they are built with the correct operands.
>>
>>Bootstrapped/regtested on powerpc64{,le}-linux, ok for trunk?
>
> OK.

(That got pushed in commit bca558de2a24b2a78c6a321d6cec384e07759d77
"tree: Fix up get_narrower [PR94724]".)

>>--- gcc/tree.c.jj     2020-04-04 09:14:29.808002636 +0200
>>+++ gcc/tree.c        2020-04-23 11:07:34.003675831 +0200
>>@@ -8881,18 +8881,22 @@ get_narrower (tree op, int *unsignedp_pt

Note existing 'op' variable here...

>>
>>   if (TREE_CODE (op) == COMPOUND_EXPR)
>>     {
>>-      while (TREE_CODE (op) == COMPOUND_EXPR)
>>+      do
>>      op = TREE_OPERAND (op, 1);
>>+      while (TREE_CODE (op) == COMPOUND_EXPR);
>>       tree ret = get_narrower (op, unsignedp_ptr);
>>       if (ret == op)
>>      return win;
>>-      op = win;
>>-      for (tree *p = &win; TREE_CODE (op) == COMPOUND_EXPR;
>>-        op = TREE_OPERAND (op, 1), p = &TREE_OPERAND (*p, 1))
>>-     *p = build2_loc (EXPR_LOCATION (op), COMPOUND_EXPR,
>>-                      TREE_TYPE (ret), TREE_OPERAND (op, 0),
>>-                      ret);
>>-      return win;
>>+      auto_vec <tree, 16> v;
>>+      unsigned int i;
>>+      for (tree op = win; TREE_CODE (op) == COMPOUND_EXPR;

..., and new 'op' variable here.

>>+        op = TREE_OPERAND (op, 1))
>>+     v.safe_push (op);
>>+      FOR_EACH_VEC_ELT_REVERSE (v, i, op)
>>+     ret = build2_loc (EXPR_LOCATION (op), COMPOUND_EXPR,
>>+                       TREE_TYPE (win), TREE_OPERAND (op, 0),
>>+                       ret);
>>+      return ret;
>>     }
>>   while (TREE_CODE (op) == NOP_EXPR)
>>     {

Old compilers:

    g++ (Sourcery CodeBench 2014.05-45) 4.8.3 20140320 (prerelease)

..., and also:

    g++-4.6 (Ubuntu/Linaro 4.6.3-10ubuntu1) 4.6.3 20120918 (prerelease)

... warn:

    {+[...]/gcc/tree.c: In function 'tree_node* get_narrower(tree, int*)':+}
    {+[...]/gcc/tree.c:8897:55: warning: name lookup of 'op' changed [enabled by default]+}
    {+       FOR_EACH_VEC_ELT_REVERSE (v, i, op)+}
    {+                                                       ^+}
    {+[...]/gcc/tree.c:8877:1: warning:   matches this 'op' under ISO standard rules [enabled by default]+}
    {+ get_narrower (tree op, int *unsignedp_ptr)+}
    {+ ^+}
    {+[...]/gcc/tree.c:8894:17: warning:   matches this 'op' under old rules [enabled by default]+}
    {+       for (tree op = win; TREE_CODE (op) == COMPOUND_EXPR;+}
    {+                 ^+}

("Interesting.")  The bootstrapped GCC itself doesn't diagnose this.  Is
there something to be worried about?  (Certainly the variable shadowing
could be avoided?)


Grüße
 Thomas
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter


More information about the Gcc-patches mailing list