aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGen/integer-overflow.c
diff options
context:
space:
mode:
authorEli Friedman <efriedma@codeaurora.org>2017-01-12 19:51:44 +0000
committerEli Friedman <efriedma@codeaurora.org>2017-01-12 19:51:44 +0000
commit6503f24da853ed3c127b4b2704cd58538cbcf974 (patch)
tree8cafab14917fe9cba8dda9665c0c485989b52a4f /clang/test/CodeGen/integer-overflow.c
parent3db8bcdbbabce19726ac7ea7fbaf320af26d1330 (diff)
downloadllvm-6503f24da853ed3c127b4b2704cd58538cbcf974.zip
llvm-6503f24da853ed3c127b4b2704cd58538cbcf974.tar.gz
llvm-6503f24da853ed3c127b4b2704cd58538cbcf974.tar.bz2
Add additional testcases for nsw markings on ++ and --.
clang has generated correct IR for char/short decrement since r126816, but we didn't have any test coverage for decrement. Patch by Andrew Rogers. llvm-svn: 291805
Diffstat (limited to 'clang/test/CodeGen/integer-overflow.c')
-rw-r--r--clang/test/CodeGen/integer-overflow.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/clang/test/CodeGen/integer-overflow.c b/clang/test/CodeGen/integer-overflow.c
index 6a7c3e5..0b28bc5 100644
--- a/clang/test/CodeGen/integer-overflow.c
+++ b/clang/test/CodeGen/integer-overflow.c
@@ -65,13 +65,37 @@ void test1() {
// TRAPV: getelementptr inbounds i32, i32*
// CATCH_UB: getelementptr inbounds i32, i32*
- // PR9350: char increment never overflows.
- extern volatile signed char PR9350;
+ // PR9350: char pre-increment never overflows.
+ extern volatile signed char PR9350_char_inc;
// DEFAULT: add i8 {{.*}}, 1
// WRAPV: add i8 {{.*}}, 1
// TRAPV: add i8 {{.*}}, 1
// CATCH_UB: add i8 {{.*}}, 1
- ++PR9350;
+ ++PR9350_char_inc;
+
+ // PR9350: char pre-decrement never overflows.
+ extern volatile signed char PR9350_char_dec;
+ // DEFAULT: add i8 {{.*}}, -1
+ // WRAPV: add i8 {{.*}}, -1
+ // TRAPV: add i8 {{.*}}, -1
+ // CATCH_UB: add i8 {{.*}}, -1
+ --PR9350_char_dec;
+
+ // PR9350: short pre-increment never overflows.
+ extern volatile signed short PR9350_short_inc;
+ // DEFAULT: add i16 {{.*}}, 1
+ // WRAPV: add i16 {{.*}}, 1
+ // TRAPV: add i16 {{.*}}, 1
+ // CATCH_UB: add i16 {{.*}}, 1
+ ++PR9350_short_inc;
+
+ // PR9350: short pre-decrement never overflows.
+ extern volatile signed short PR9350_short_dec;
+ // DEFAULT: add i16 {{.*}}, -1
+ // WRAPV: add i16 {{.*}}, -1
+ // TRAPV: add i16 {{.*}}, -1
+ // CATCH_UB: add i16 {{.*}}, -1
+ --PR9350_short_dec;
// PR24256: don't instrument __builtin_frame_address.
__builtin_frame_address(0 + 0);