forked from OSchip/llvm-project
CGBuiltin.cpp: Fix abuse of ArrayRef in EmitOverflowIntrinsic().
In ArrayRef<T>(X), X should not be temporary value. It could be rewritten more redundantly; llvm::Type *XTy = X->getType(); ArrayRef<llvm::Type *> Ty(XTy); llvm::Value *Callee = CGF.CGM.getIntrinsic(IntrinsicID, Ty); Since it is safe if both XTy and Ty are temporary value in one statement, it could be shorten; llvm::Value *Callee = CGF.CGM.getIntrinsic(IntrinsicID, ArrayRef<llvm::Type*>(X->getType())); ArrayRef<T> has an implicit constructor to create uni-entry of T; llvm::Value *Callee = CGF.CGM.getIntrinsic(IntrinsicID, X->getType()); MSVC-generated clang.exe crashed. llvm-svn: 172352
This commit is contained in:
parent
48cb3b97c7
commit
7ab4fbf5c2
|
@ -187,8 +187,7 @@ static llvm::Value *EmitOverflowIntrinsic(CodeGenFunction &CGF,
|
|||
"Arguments must be the same type. (Did you forget to make sure both "
|
||||
"arguments have the same integer width?)");
|
||||
|
||||
ArrayRef<llvm::Type *> Type(X->getType());
|
||||
llvm::Value *Callee = CGF.CGM.getIntrinsic(IntrinsicID, Type);
|
||||
llvm::Value *Callee = CGF.CGM.getIntrinsic(IntrinsicID, X->getType());
|
||||
llvm::Value *Tmp = CGF.Builder.CreateCall2(Callee, X, Y);
|
||||
Carry = CGF.Builder.CreateExtractValue(Tmp, 1);
|
||||
return CGF.Builder.CreateExtractValue(Tmp, 0);
|
||||
|
|
Loading…
Reference in New Issue