forked from OSchip/llvm-project
[UBsan] Skip -fsanitize=vptr instrumentations when the pointer value is null.
Otherwise -fsanitize=vptr causes the program to crash when it downcasts a null pointer. Reviewed in http://reviews.llvm.org/D4412. Patch by Byoungyoung Lee! llvm-svn: 213393
This commit is contained in:
parent
6c12414358
commit
32f59d8e1e
|
@ -463,7 +463,7 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
|
|||
llvm::Value *Cond = nullptr;
|
||||
llvm::BasicBlock *Done = nullptr;
|
||||
|
||||
if (SanOpts->Null) {
|
||||
if (SanOpts->Null || TCK == TCK_DowncastPointer) {
|
||||
// The glvalue must not be an empty glvalue.
|
||||
Cond = Builder.CreateICmpNE(
|
||||
Address, llvm::Constant::getNullValue(Address->getType()));
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// RUN: %clang_cc1 -std=c++11 -fsanitize=signed-integer-overflow,integer-divide-by-zero,float-divide-by-zero,shift,unreachable,return,vla-bound,alignment,null,vptr,object-size,float-cast-overflow,bool,enum,array-bounds,function -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++11 -fsanitize=vptr,address -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefix=CHECK-ASAN
|
||||
// RUN: %clang_cc1 -std=c++11 -fsanitize=vptr -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefix=DOWNCAST-NULL
|
||||
|
||||
struct S {
|
||||
double d;
|
||||
|
@ -190,10 +191,15 @@ int bad_enum_value() {
|
|||
}
|
||||
|
||||
// CHECK-LABEL: @_Z20bad_downcast_pointer
|
||||
// DOWNCAST-NULL-LABEL: @_Z20bad_downcast_pointer
|
||||
void bad_downcast_pointer(S *p) {
|
||||
// CHECK: %[[NONNULL:.*]] = icmp ne {{.*}}, null
|
||||
// CHECK: br i1 %[[NONNULL]],
|
||||
|
||||
// A null poiner access is guarded without -fsanitize=null.
|
||||
// DOWNCAST-NULL: %[[NONNULL:.*]] = icmp ne {{.*}}, null
|
||||
// DOWNCAST-NULL: br i1 %[[NONNULL]],
|
||||
|
||||
// CHECK: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64.p0i8(
|
||||
// CHECK: %[[E1:.*]] = icmp uge i64 %[[SIZE]], 24
|
||||
// CHECK: %[[MISALIGN:.*]] = and i64 %{{.*}}, 7
|
||||
|
|
Loading…
Reference in New Issue