r297331 - Revert "[ubsan] Detect UB loads from bitfields"
Vedant Kumar via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 8 16:18:54 PST 2017
Author: vedantk
Date: Wed Mar 8 18:18:53 2017
New Revision: 297331
URL: http://llvm.org/viewvc/llvm-project?rev=297331&view=rev
Log:
Revert "[ubsan] Detect UB loads from bitfields"
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
Removed:
cfe/trunk/test/CodeGenCXX/ubsan-bitfields.cpp
Modified:
cfe/trunk/lib/CodeGen/CGAtomic.cpp
cfe/trunk/lib/CodeGen/CGExpr.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.h
cfe/trunk/test/CodeGenObjC/ubsan-bool.m
Modified: cfe/trunk/lib/CodeGen/CGAtomic.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGAtomic.cpp?rev=297331&r1=297330&r2=297331&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGAtomic.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGAtomic.cpp Wed Mar 8 18:18:53 2017
@@ -1181,7 +1181,7 @@ RValue AtomicInfo::convertAtomicTempToRV
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(),
Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=297331&r1=297330&r2=297331&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExpr.cpp Wed Mar 8 18:18:53 2017
@@ -1549,11 +1549,10 @@ RValue CodeGenFunction::EmitLoadOfLValue
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::EmitLoadOfBitfie
"bf.clear");
}
Val = Builder.CreateIntCast(Val, ResLTy, Info.IsSigned, "bf.cast");
- EmitScalarRangeCheck(Val, LV.getType(), Loc);
+
return RValue::get(Val);
}
Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=297331&r1=297330&r2=297331&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Wed Mar 8 18:18:53 2017
@@ -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
Removed: cfe/trunk/test/CodeGenCXX/ubsan-bitfields.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/ubsan-bitfields.cpp?rev=297330&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenCXX/ubsan-bitfields.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/ubsan-bitfields.cpp (removed)
@@ -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;
-}
Modified: cfe/trunk/test/CodeGenObjC/ubsan-bool.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/ubsan-bool.m?rev=297331&r1=297330&r2=297331&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenObjC/ubsan-bool.m (original)
+++ cfe/trunk/test/CodeGenObjC/ubsan-bool.m Wed Mar 8 18:18:53 2017
@@ -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__
- at interface I1 {
- at public
- BOOL b1 : 1;
-}
- at property (nonatomic) BOOL b1;
- at end
- at implementation I1
- at synthesize b1;
- at 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__ */
More information about the cfe-commits
mailing list