parent
16048332f1
commit
2f15263807
|
@ -408,8 +408,9 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
|
|||
assert(CI);
|
||||
uint64_t val = CI->getZExtValue();
|
||||
CI = ConstantInt::get(Builder.getInt1Ty(), (val & 0x2) >> 1);
|
||||
|
||||
Value *F = CGM.getIntrinsic(Intrinsic::objectsize, ResType);
|
||||
// FIXME: Get right address space.
|
||||
llvm::Type *Tys[] = { ResType, Builder.getInt8PtrTy(0) };
|
||||
Value *F = CGM.getIntrinsic(Intrinsic::objectsize, Tys);
|
||||
return RValue::get(Builder.CreateCall2(F, EmitScalarExpr(E->getArg(0)),CI));
|
||||
}
|
||||
case Builtin::BI__builtin_prefetch: {
|
||||
|
|
|
@ -476,7 +476,9 @@ void CodeGenFunction::EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc,
|
|||
// The glvalue must refer to a large enough storage region.
|
||||
// FIXME: If Address Sanitizer is enabled, insert dynamic instrumentation
|
||||
// to check this.
|
||||
llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, IntPtrTy);
|
||||
// FIXME: Get object address space
|
||||
llvm::Type *Tys[2] = { IntPtrTy, Int8PtrTy };
|
||||
llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, Tys);
|
||||
llvm::Value *Min = Builder.getFalse();
|
||||
llvm::Value *CastAddr = Builder.CreateBitCast(Address, Int8PtrTy);
|
||||
llvm::Value *LargeEnough =
|
||||
|
|
|
@ -31,12 +31,12 @@ void foo() {
|
|||
// CHECK-TRAP: %[[CHECK0:.*]] = icmp ne {{.*}}* %[[PTR:.*]], null
|
||||
|
||||
// CHECK: %[[I8PTR:.*]] = bitcast i32* %[[PTR]] to i8*
|
||||
// CHECK-NEXT: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64(i8* %[[I8PTR]], i1 false)
|
||||
// CHECK-NEXT: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64.p0i8(i8* %[[I8PTR]], i1 false)
|
||||
// CHECK-NEXT: %[[CHECK1:.*]] = icmp uge i64 %[[SIZE]], 4
|
||||
// CHECK-NEXT: %[[CHECK01:.*]] = and i1 %[[CHECK0]], %[[CHECK1]]
|
||||
|
||||
// CHECK-TRAP: %[[I8PTR:.*]] = bitcast i32* %[[PTR]] to i8*
|
||||
// CHECK-TRAP-NEXT: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64(i8* %[[I8PTR]], i1 false)
|
||||
// CHECK-TRAP-NEXT: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64.p0i8(i8* %[[I8PTR]], i1 false)
|
||||
// CHECK-TRAP-NEXT: %[[CHECK1:.*]] = icmp uge i64 %[[SIZE]], 4
|
||||
// CHECK-TRAP-NEXT: %[[CHECK01:.*]] = and i1 %[[CHECK0]], %[[CHECK1]]
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ void test4() {
|
|||
// CHECK-LABEL: define void @test5
|
||||
void test5() {
|
||||
// CHECK: = load i8** @gp
|
||||
// CHECK-NEXT:= call i64 @llvm.objectsize.i64(i8* %{{.*}}, i1 false)
|
||||
// CHECK-NEXT:= call i64 @llvm.objectsize.i64.p0i8(i8* %{{.*}}, i1 false)
|
||||
strcpy(gp, "Hi there");
|
||||
}
|
||||
|
||||
|
|
|
@ -186,7 +186,7 @@ void bad_downcast_pointer(S *p) {
|
|||
// CHECK: %[[NONNULL:.*]] = icmp ne {{.*}}, null
|
||||
// CHECK: br i1 %[[NONNULL]],
|
||||
|
||||
// CHECK: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64(
|
||||
// CHECK: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64.p0i8(
|
||||
// CHECK: %[[E1:.*]] = icmp uge i64 %[[SIZE]], 24
|
||||
// CHECK: %[[MISALIGN:.*]] = and i64 %{{.*}}, 7
|
||||
// CHECK: %[[E2:.*]] = icmp eq i64 %[[MISALIGN]], 0
|
||||
|
@ -207,7 +207,7 @@ void bad_downcast_pointer(S *p) {
|
|||
void bad_downcast_reference(S &p) {
|
||||
// CHECK: %[[E1:.*]] = icmp ne {{.*}}, null
|
||||
// CHECK-NOT: br i1
|
||||
// CHECK: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64(
|
||||
// CHECK: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64.p0i8(
|
||||
// CHECK: %[[E2:.*]] = icmp uge i64 %[[SIZE]], 24
|
||||
// CHECK: %[[E12:.*]] = and i1 %[[E1]], %[[E2]]
|
||||
// CHECK: %[[MISALIGN:.*]] = and i64 %{{.*}}, 7
|
||||
|
|
Loading…
Reference in New Issue