diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-11-05 11:27:13 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-11-05 11:27:13 +0100 |
commit | cbd429001f3a6c2338c695cc71a28cd8320e3bd2 (patch) | |
tree | aeee249157fa691b135dac0bdb407aec0dd219fb /gcc/match.pd | |
parent | 6db6445e1b3f57e61db66dfe5b6b19013f4f5f49 (diff) | |
download | gcc-cbd429001f3a6c2338c695cc71a28cd8320e3bd2.zip gcc-cbd429001f3a6c2338c695cc71a28cd8320e3bd2.tar.gz gcc-cbd429001f3a6c2338c695cc71a28cd8320e3bd2.tar.bz2 |
re PR sanitizer/87837 (-O2 -fsanitize=signed-integer-overflow misses overflows on x86-64)
PR sanitizer/87837
* match.pd (X + Y < X): Don't optimize if TYPE_OVERFLOW_SANITIZED.
* c-c++-common/ubsan/pr87837.c: New test.
From-SVN: r265793
Diffstat (limited to 'gcc/match.pd')
-rw-r--r-- | gcc/match.pd | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/match.pd b/gcc/match.pd index d07ceb7..d47249a 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1572,6 +1572,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (op:c (plus:c@2 @0 @1) @1) (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0)) && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (@0)) + && !TYPE_OVERFLOW_SANITIZED (TREE_TYPE (@0)) && (CONSTANT_CLASS_P (@0) || single_use (@2))) (op @0 { build_zero_cst (TREE_TYPE (@0)); })))) /* For equality, this is also true with wrapping overflow. */ |