]> granicus.if.org Git - clang/commitdiff
Revert "[ubsan] Detect UB loads from bitfields"
authorVedant Kumar <vsk@apple.com>
Thu, 9 Mar 2017 00:18:53 +0000 (00:18 +0000)
committerVedant Kumar <vsk@apple.com>
Thu, 9 Mar 2017 00:18:53 +0000 (00:18 +0000)
This reverts commit r297298. It breaks the self-host on this bot:

  http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/962/steps/build%20clang%2Fubsan/logs/stdio

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

lib/CodeGen/CGAtomic.cpp
lib/CodeGen/CGExpr.cpp
lib/CodeGen/CodeGenFunction.h
test/CodeGenCXX/ubsan-bitfields.cpp [deleted file]
test/CodeGenObjC/ubsan-bool.m

index 28e20b53d656241ed3f2fe43b85f607fdbfa6ae8..9287e46127bd5328aeac11bb16af1a7ebc5bb08c 100644 (file)
@@ -1181,7 +1181,7 @@ RValue AtomicInfo::convertAtomicTempToRValue(Address addr,
   if (LVal.isBitField())
     return CGF.EmitLoadOfBitfieldLValue(
         LValue::MakeBitfield(addr, LVal.getBitFieldInfo(), LVal.getType(),
-                             LVal.getAlignmentSource()), loc);
+                             LVal.getAlignmentSource()));
   if (LVal.isVectorElt())
     return CGF.EmitLoadOfLValue(
         LValue::MakeVectorElt(addr, LVal.getVectorIdx(), LVal.getType(),
index 7a3a47965ec66eded1ec97573e438f803195aef1..15cd7ccbaac744f3bdb6ad38834f70eb2eb6f1c2 100644 (file)
@@ -1549,11 +1549,10 @@ RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, SourceLocation Loc) {
     return EmitLoadOfGlobalRegLValue(LV);
 
   assert(LV.isBitField() && "Unknown LValue type!");
-  return EmitLoadOfBitfieldLValue(LV, Loc);
+  return EmitLoadOfBitfieldLValue(LV);
 }
 
-RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV,
-                                                 SourceLocation Loc) {
+RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV) {
   const CGBitFieldInfo &Info = LV.getBitFieldInfo();
 
   // Get the output type.
@@ -1578,7 +1577,7 @@ RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV,
                               "bf.clear");
   }
   Val = Builder.CreateIntCast(Val, ResLTy, Info.IsSigned, "bf.cast");
-  EmitScalarRangeCheck(Val, LV.getType(), Loc);
+
   return RValue::get(Val);
 }
 
index d7b1993d5770108b8373d69382abd283950edae6..6112f26f6d8ea7e36428d587fe4d517297deb9c9 100644 (file)
@@ -2943,7 +2943,7 @@ public:
   /// rvalue, returning the rvalue.
   RValue EmitLoadOfLValue(LValue V, SourceLocation Loc);
   RValue EmitLoadOfExtVectorElementLValue(LValue V);
-  RValue EmitLoadOfBitfieldLValue(LValue LV, SourceLocation Loc);
+  RValue EmitLoadOfBitfieldLValue(LValue LV);
   RValue EmitLoadOfGlobalRegLValue(LValue LV);
 
   /// EmitStoreThroughLValue - Store the specified rvalue into the specified
diff --git a/test/CodeGenCXX/ubsan-bitfields.cpp b/test/CodeGenCXX/ubsan-bitfields.cpp
deleted file mode 100644 (file)
index c8e9d9b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -fsanitize=enum | FileCheck %s
-
-enum E {
-  a = 1,
-  b = 2,
-  c = 3
-};
-
-struct S {
-  E e1 : 10;
-};
-
-// CHECK-LABEL: define i32 @_Z4loadP1S
-E load(S *s) {
-  // CHECK: [[LOAD:%.*]] = load i16, i16* {{.*}}
-  // CHECK: [[CLEAR:%.*]] = and i16 [[LOAD]], 1023
-  // CHECK: [[CAST:%.*]] = zext i16 [[CLEAR]] to i32
-  // CHECK: icmp ule i32 [[CAST]], 3, !nosanitize
-  // CHECK: call void @__ubsan_handle_load_invalid_value
-  return s->e1;
-}
index b30562c4d423354ea7c50e7dd72dc0da0d20c969..6d6c08358d079eddec27e5814d6c33c9fcba17a5 100644 (file)
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -x objective-c -emit-llvm -triple x86_64-apple-macosx10.10.0 -fsanitize=bool %s -o - -w | FileCheck %s -check-prefixes=SHARED,OBJC
-// RUN: %clang_cc1 -x objective-c++ -emit-llvm -triple x86_64-apple-macosx10.10.0 -fsanitize=bool %s -o - -w | FileCheck %s -check-prefixes=SHARED,OBJC
+// RUN: %clang_cc1 -x objective-c -emit-llvm -triple x86_64-apple-macosx10.10.0 -fsanitize=bool %s -o - | FileCheck %s -check-prefixes=SHARED,OBJC
+// RUN: %clang_cc1 -x objective-c++ -emit-llvm -triple x86_64-apple-macosx10.10.0 -fsanitize=bool %s -o - | FileCheck %s -check-prefixes=SHARED,OBJC
 // RUN: %clang_cc1 -x c -emit-llvm -triple x86_64-apple-macosx10.10.0 -fsanitize=bool %s -o - | FileCheck %s -check-prefixes=SHARED,C
 
 typedef signed char BOOL;
@@ -10,57 +10,4 @@ BOOL f1() {
   // C-NOT: call void @__ubsan_handle_load_invalid_value
   BOOL a = 2;
   return a + 1;
-  // SHARED: ret i8
 }
-
-struct S1 {
-  BOOL b1 : 1;
-};
-
-// SHARED-LABEL: f2
-BOOL f2(struct S1 *s) {
-  // OBJC: [[LOAD:%.*]] = load i8, i8* {{.*}}
-  // OBJC: [[SHL:%.*]] = shl i8 [[LOAD]], 7
-  // OBJC: [[ASHR:%.*]] = ashr i8 [[SHL]], 7
-  // OBJC: icmp ule i8 [[ASHR]], 1, !nosanitize
-  // OBJC: call void @__ubsan_handle_load_invalid_value
-
-  // C-NOT: call void @__ubsan_handle_load_invalid_value
-  return s->b1;
-  // SHARED: ret i8
-}
-
-#ifdef __OBJC__
-@interface I1 {
-@public
-  BOOL b1 : 1;
-}
-@property (nonatomic) BOOL b1;
-@end
-@implementation I1
-@synthesize b1;
-@end
-
-// Check the synthesized getter.
-// OBJC-LABEL: define internal signext i8 @"\01-[I1 b1]"
-// OBJC: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_I1.b1"
-// OBJC: [[ADDR:%.*]] = getelementptr inbounds i8, i8* {{.*}}, i64 [[IVAR]]
-// OBJC: [[LOAD:%.*]] = load i8, i8* {{.*}}
-// OBJC: [[SHL:%.*]] = shl i8 [[LOAD]], 7
-// OBJC: [[ASHR:%.*]] = ashr i8 [[SHL]], 7
-// OBJC: icmp ule i8 [[ASHR]], 1, !nosanitize
-// OBJC: call void @__ubsan_handle_load_invalid_value
-
-// Also check direct accesses to the ivar.
-// OBJC-LABEL: f3
-BOOL f3(I1 *i) {
-  // OBJC: [[LOAD:%.*]] = load i8, i8* {{.*}}
-  // OBJC: [[SHL:%.*]] = shl i8 [[LOAD]], 7
-  // OBJC: [[ASHR:%.*]] = ashr i8 [[SHL]], 7
-  // OBJC: icmp ule i8 [[ASHR]], 1, !nosanitize
-  // OBJC: call void @__ubsan_handle_load_invalid_value
-
-  return i->b1;
-  // OBJC: ret i8
-}
-#endif /* __OBJC__ */