diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp index caad91867112ce..b6dc97f1e43f89 100644 --- a/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp +++ b/llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp @@ -979,9 +979,8 @@ void ObjCARCOpt::OptimizeIndividualCallImpl( CallInst *CI = cast(Inst); if (IsNullOrUndef(CI->getArgOperand(0))) { Changed = true; - Type *Ty = CI->getArgOperand(0)->getType(); - new StoreInst(UndefValue::get(Ty->getPointerElementType()), - Constant::getNullValue(Ty), CI); + new StoreInst(ConstantInt::getTrue(CI->getContext()), + UndefValue::get(Type::getInt1PtrTy(CI->getContext())), CI); Value *NewValue = UndefValue::get(CI->getType()); LLVM_DEBUG( dbgs() << "A null pointer-to-weak-pointer is undefined behavior." @@ -999,9 +998,8 @@ void ObjCARCOpt::OptimizeIndividualCallImpl( if (IsNullOrUndef(CI->getArgOperand(0)) || IsNullOrUndef(CI->getArgOperand(1))) { Changed = true; - Type *Ty = CI->getArgOperand(0)->getType(); - new StoreInst(UndefValue::get(Ty->getPointerElementType()), - Constant::getNullValue(Ty), CI); + new StoreInst(ConstantInt::getTrue(CI->getContext()), + UndefValue::get(Type::getInt1PtrTy(CI->getContext())), CI); Value *NewValue = UndefValue::get(CI->getType()); LLVM_DEBUG( diff --git a/llvm/test/Transforms/ObjCARC/weak.ll b/llvm/test/Transforms/ObjCARC/weak.ll index 2009addbbdc561..00a4e9f681e7d5 100644 --- a/llvm/test/Transforms/ObjCARC/weak.ll +++ b/llvm/test/Transforms/ObjCARC/weak.ll @@ -14,24 +14,24 @@ declare void @llvm.objc.copyWeak(i8**, i8**) define void @test0(i8* %p, i8** %q) { ; CHECK-LABEL: @test0( ; CHECK-NEXT: entry: -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 -; CHECK-NEXT: store i8* undef, i8** null, align 8 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 +; CHECK-NEXT: store i1 true, i1* undef, align 1 ; CHECK-NEXT: ret void ; entry: