]> granicus.if.org Git - clang/commitdiff
Revert "r293343 - [ubsan] Sanity-check shift amounts before truncation
authorAlex Lorenz <arphaman@gmail.com>
Mon, 30 Jan 2017 11:37:18 +0000 (11:37 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Mon, 30 Jan 2017 11:37:18 +0000 (11:37 +0000)
(fixes PR27271)"

After r293343 clang fails to compile itself with -fsanitize=undefined (
http://lab.llvm.org:8080/green/job/clang-stage2-cmake-RgSan_build/).

rdar://30259929

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@293475 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprScalar.cpp
test/CodeGen/ubsan-shift.c [deleted file]

index 40d949decebdc2dc9be2cc40c48b55575569e298..1b85c45cd4be16682e7c96999ef26165e767c2a2 100644 (file)
@@ -2751,8 +2751,8 @@ Value *ScalarExprEmitter::EmitShl(const BinOpInfo &Ops) {
            isa<llvm::IntegerType>(Ops.LHS->getType())) {
     CodeGenFunction::SanitizerScope SanScope(&CGF);
     SmallVector<std::pair<Value *, SanitizerMask>, 2> Checks;
-    llvm::Value *WidthMinusOne = GetWidthMinusOneValue(Ops.LHS, Ops.RHS);
-    llvm::Value *ValidExponent = Builder.CreateICmpULE(Ops.RHS, WidthMinusOne);
+    llvm::Value *WidthMinusOne = GetWidthMinusOneValue(Ops.LHS, RHS);
+    llvm::Value *ValidExponent = Builder.CreateICmpULE(RHS, WidthMinusOne);
 
     if (SanitizeExponent) {
       Checks.push_back(
diff --git a/test/CodeGen/ubsan-shift.c b/test/CodeGen/ubsan-shift.c
deleted file mode 100644 (file)
index ecdb2b9..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-// RUN: %clang_cc1 -triple=x86_64-apple-darwin -fsanitize=shift-exponent -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);
-}