re PR sanitizer/81281 (UBSAN: false positive, dropped promotion to long type.)
authorJakub Jelinek <jakub@redhat.com>
Fri, 15 Dec 2017 14:36:26 +0000 (15:36 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 15 Dec 2017 14:36:26 +0000 (15:36 +0100)
commita72610d4320925787d635cb4ddb8a40967e05bc3
tree396cbb2afd84f1aa78d9ca5c6710dbc2fa445440
parent5b85ad7d19aa1428b4f657bbbd5bf39d34ecbb14
re PR sanitizer/81281 (UBSAN: false positive, dropped promotion to long type.)

PR sanitizer/81281
* match.pd ((T)(P + A) - (T)P -> (T) A): Use @@0 instead of @0 and
convert? on @0 instead of convert.  Check type of @1, not @0.
((T)P - (T)(P + A) -> -(T) A): Use @@0 instead of @0 and
convert? on @0 instead of convert.  Check type of @1, not @0.
((T)(P + A) - (T)(P + B) -> (T)A - (T)B): Use @@0 instead of @0,
only optimize if either both @1 and @2 types are narrower
precision, or both are wider or equal precision, and in the former
case only if both have undefined overflow.

* gcc.dg/pr81281-3.c: New test.

From-SVN: r255696
gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr81281-3.c [new file with mode: 0644]