diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:02:28 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:02:28 +0000 |
| commit | 7442d6faa2719e4e7d33a7021c406c5a4facd74d (patch) | |
| tree | c72b9241553fc9966179aba84f90f17bfa9235c3 /test/CodeGen/ubsan-shift.c | |
| parent | b52119637f743680a99710ce5fdb6646da2772af (diff) | |
Notes
Diffstat (limited to 'test/CodeGen/ubsan-shift.c')
| -rw-r--r-- | test/CodeGen/ubsan-shift.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/test/CodeGen/ubsan-shift.c b/test/CodeGen/ubsan-shift.c new file mode 100644 index 000000000000..90c15d8c086f --- /dev/null +++ b/test/CodeGen/ubsan-shift.c @@ -0,0 +1,47 @@ +// RUN: %clang_cc1 -triple=x86_64-apple-darwin -fsanitize=shift-exponent,shift-base -emit-llvm %s -o - | FileCheck %s + +// CHECK-LABEL: define i32 @f1 +int f1(int c, int shamt) { +// CHECK: icmp ule i32 %{{.*}}, 31, !nosanitize +// CHECK: icmp ule i32 %{{.*}}, 31, !nosanitize + return 1 << (c << shamt); +} + +// CHECK-LABEL: define i32 @f2 +int f2(long c, int shamt) { +// CHECK: icmp ule i32 %{{.*}}, 63, !nosanitize +// CHECK: icmp ule i64 %{{.*}}, 31, !nosanitize + return 1 << (c << shamt); +} + +// CHECK-LABEL: define i32 @f3 +unsigned f3(unsigned c, int shamt) { +// CHECK: icmp ule i32 %{{.*}}, 31, !nosanitize +// CHECK: icmp ule i32 %{{.*}}, 31, !nosanitize + return 1U << (c << shamt); +} + +// CHECK-LABEL: define i32 @f4 +unsigned f4(unsigned long c, int shamt) { +// CHECK: icmp ule i32 %{{.*}}, 63, !nosanitize +// CHECK: icmp ule i64 %{{.*}}, 31, !nosanitize + return 1U << (c << shamt); +} + +// CHECK-LABEL: define i32 @f5 +int f5(int c, long long shamt) { +// CHECK: icmp ule i64 %{{[0-9]+}}, 31, !nosanitize +// +// CHECK: sub nuw nsw i32 31, %sh_prom, !nosanitize +// CHECK: lshr i32 %{{.*}}, %shl.zeros, !nosanitize + return c << shamt; +} + +// CHECK-LABEL: define i32 @f6 +int f6(int c, int shamt) { +// CHECK: icmp ule i32 %[[WIDTH:.*]], 31, !nosanitize +// +// CHECK: sub nuw nsw i32 31, %[[WIDTH]], !nosanitize +// CHECK: lshr i32 %{{.*}}, %shl.zeros, !nosanitize + return c << shamt; +} |
