forked from OSchip/llvm-project
AMDGPU: Fix crash if called function is a bitcast
getCalledFunction() is null, so this would crash. Replace crash with an error on unsupported call. llvm-svn: 243461
This commit is contained in:
parent
42f1d67a45
commit
fdcd39a8ad
|
@ -240,7 +240,12 @@ static bool collectUsesWithPtrTypes(Value *Val, std::vector<Value*> &WorkList) {
|
|||
for (User *User : Val->users()) {
|
||||
if(std::find(WorkList.begin(), WorkList.end(), User) != WorkList.end())
|
||||
continue;
|
||||
if (isa<CallInst>(User)) {
|
||||
if (CallInst *CI = dyn_cast<CallInst>(User)) {
|
||||
// TODO: We might be able to handle some cases where the callee is a
|
||||
// constantexpr bitcast of a function.
|
||||
if (!CI->getCalledFunction())
|
||||
return false;
|
||||
|
||||
WorkList.push_back(User);
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
; RUN: not llc -march=amdgcn < %s 2>&1 | FileCheck %s
|
||||
|
||||
; Make sure that AMDGPUPromoteAlloca doesn't crash if the called
|
||||
; function is a constantexpr cast of a function.
|
||||
|
||||
declare void @foo(float*) #0
|
||||
declare void @foo.varargs(...) #0
|
||||
|
||||
; CHECK: error: unsupported call to function foo in crash_call_constexpr_cast
|
||||
define void @crash_call_constexpr_cast() #0 {
|
||||
%alloca = alloca i32
|
||||
call void bitcast (void (float*)* @foo to void (i32*)*)(i32* %alloca) #0
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @crash_call_constexpr_cast_varargs() #0 {
|
||||
%alloca = alloca i32
|
||||
call void bitcast (void (...)* @foo.varargs to void (i32*)*)(i32* %alloca) #0
|
||||
ret void
|
||||
}
|
||||
|
||||
attributes #0 = { nounwind }
|
Loading…
Reference in New Issue