diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -3150,6 +3150,9 @@ void Verifier::verifyMustTailCall(CallInst &CI) { Assert(!CI.isInlineAsm(), "cannot use musttail call with inline asm", &CI); + // FIXME: support musttail + preallocated + Assert(!CI.countOperandBundlesOfType(LLVMContext::OB_preallocated), + "musttail and preallocated not yet supported", &CI); // - The caller and callee prototypes must match. Pointer types of // parameters or return types may differ in pointee type, but not diff --git a/llvm/test/Verifier/preallocated-invalid.ll b/llvm/test/Verifier/preallocated-invalid.ll --- a/llvm/test/Verifier/preallocated-invalid.ll +++ b/llvm/test/Verifier/preallocated-invalid.ll @@ -116,3 +116,10 @@ %x = call i8* @llvm.call.preallocated.arg(token %t, i32 1) preallocated(i32) ret void } + +; CHECK: musttail and preallocated not yet supported +define void @musttail() { + %cs = call token @llvm.call.preallocated.setup(i32 0) + musttail call void @foo0() ["preallocated"(token %cs)] + ret void +}