mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 05:06:06 +00:00
CodeGen: Add CFI unrelated cast checks to the new pointer code path.
llvm-svn: 247105
This commit is contained in:
parent
84df12375c
commit
ee381ffba4
@ -820,6 +820,14 @@ Address CodeGenFunction::EmitPointerWithAlignment(const Expr *E,
|
||||
getNaturalPointeeTypeAlignment(E->getType(), Source));
|
||||
}
|
||||
|
||||
if (SanOpts.has(SanitizerKind::CFIUnrelatedCast)) {
|
||||
if (auto PT = E->getType()->getAs<PointerType>())
|
||||
EmitVTablePtrCheckForCast(PT->getPointeeType(), Addr.getPointer(),
|
||||
/*MayBeNull=*/true,
|
||||
CodeGenFunction::CFITCK_UnrelatedCast,
|
||||
CE->getLocStart());
|
||||
}
|
||||
|
||||
return Builder.CreateBitCast(Addr, ConvertType(E->getType()));
|
||||
}
|
||||
break;
|
||||
|
@ -107,3 +107,19 @@ void vcp(void *p) {
|
||||
// CHECK-UCAST-STRICT: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"1C")
|
||||
static_cast<C*>(p);
|
||||
}
|
||||
|
||||
// CHECK-UCAST-LABEL: define void @_Z3bcpP1B
|
||||
// CHECK-UCAST-STRICT-LABEL: define void @_Z3bcpP1B
|
||||
void bcp(B *p) {
|
||||
// CHECK-UCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"1A")
|
||||
// CHECK-UCAST-STRICT: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"1C")
|
||||
(C *)p;
|
||||
}
|
||||
|
||||
// CHECK-UCAST-LABEL: define void @_Z8bcp_callP1B
|
||||
// CHECK-UCAST-STRICT-LABEL: define void @_Z8bcp_callP1B
|
||||
void bcp_call(B *p) {
|
||||
// CHECK-UCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"1A")
|
||||
// CHECK-UCAST-STRICT: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"1C")
|
||||
((C *)p)->f();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user