c-family: ICE with assume_aligned attribute [PR99062]
authorMarek Polacek <polacek@redhat.com>
Wed, 10 Feb 2021 20:24:25 +0000 (15:24 -0500)
committerMarek Polacek <polacek@redhat.com>
Tue, 16 Feb 2021 19:07:26 +0000 (14:07 -0500)
commit30a4d95bf76b0a0fdb66ac0211589a4434c83af3
tree07860038529294210a2523c754cbc859aa0f1e20
parent5d5e4f6ec64de3ceee753c0d221576145fd898dd
c-family: ICE with assume_aligned attribute [PR99062]

We ICE in handle_assume_aligned_attribute since r271338 which added

@@ -2935,8 +2936,8 @@ handle_assume_aligned_attribute (tree *node, tree name, tree args, int,
          /* The misalignment specified by the second argument
             must be non-negative and less than the alignment.  */
          warning (OPT_Wattributes,
-                  "%qE attribute argument %E is not in the range [0, %E)",
-                  name, val, align);
+                  "%qE attribute argument %E is not in the range [0, %wu]",
+                  name, val, tree_to_uhwi (align) - 1);
          *no_add_attrs = true;
          return NULL_TREE;
        }
because align is INT_MIN and tree_to_uhwi asserts tree_fits_uhwi_p -- which
ALIGN does not and the prior tree_fits_shwi_p check is fine with it, as
well as the integer_pow2p check.

Since neither of the arguments to assume_aligned can be negative, I've
hoisted the tree_int_cst_sgn check.  And add the missing "argument"
word to an existing warning.

gcc/c-family/ChangeLog:

PR c++/99062
* c-attribs.c (handle_assume_aligned_attribute): Check that the
alignment argument is non-negative.  Tweak a warning message.

gcc/testsuite/ChangeLog:

PR c++/99062
* gcc.dg/attr-assume_aligned-4.c: Adjust dg-warning.
* g++.dg/ext/attr-assume-aligned.C: New test.
gcc/c-family/c-attribs.c
gcc/testsuite/g++.dg/ext/attr-assume-aligned.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-assume_aligned-4.c