Skip to content

Commit be200e2

Browse files
authored
[SelectionDAG] improve error message for invalid op bundles (#148722)
1 parent d2bcc51 commit be200e2

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3351,13 +3351,30 @@ void SelectionDAGBuilder::visitInvoke(const InvokeInst &I) {
33513351

33523352
// Deopt and ptrauth bundles are lowered in helper functions, and we don't
33533353
// have to do anything here to lower funclet bundles.
3354-
if (I.hasOperandBundlesOtherThan(
3355-
{LLVMContext::OB_deopt, LLVMContext::OB_gc_transition,
3356-
LLVMContext::OB_gc_live, LLVMContext::OB_funclet,
3357-
LLVMContext::OB_cfguardtarget, LLVMContext::OB_ptrauth,
3358-
LLVMContext::OB_clang_arc_attachedcall, LLVMContext::OB_kcfi}))
3354+
constexpr uint32_t kAllowedBundles[] = {
3355+
LLVMContext::OB_deopt,
3356+
LLVMContext::OB_gc_transition,
3357+
LLVMContext::OB_gc_live,
3358+
LLVMContext::OB_funclet,
3359+
LLVMContext::OB_cfguardtarget,
3360+
LLVMContext::OB_ptrauth,
3361+
LLVMContext::OB_clang_arc_attachedcall,
3362+
LLVMContext::OB_kcfi};
3363+
if (I.hasOperandBundlesOtherThan(kAllowedBundles)) {
3364+
std::string Error;
3365+
for (unsigned i = 0, e = I.getNumOperandBundles(); i != e; ++i) {
3366+
OperandBundleUse U = I.getOperandBundleAt(i);
3367+
bool First = true;
3368+
if (is_contained(kAllowedBundles, U.getTagID()))
3369+
continue;
3370+
if (!First)
3371+
Error += ", ";
3372+
First = false;
3373+
Error += U.getTagName();
3374+
}
33593375
reportFatalUsageError(
3360-
"cannot lower invokes with arbitrary operand bundles!");
3376+
Twine("cannot lower invokes with arbitrary operand bundles: ", Error));
3377+
}
33613378

33623379
const Value *Callee(I.getCalledOperand());
33633380
const Function *Fn = dyn_cast<Function>(Callee);

llvm/test/CodeGen/X86/invalid-operand-bundle-invoke.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; RUN: not llc -mtriple=x86_64-unknown-linux-gnu < %s 2>&1 | FileCheck %s
22

3-
; CHECK: LLVM ERROR: cannot lower invokes with arbitrary operand bundles!
3+
; CHECK: LLVM ERROR: cannot lower invokes with arbitrary operand bundles: foo
44

55
declare void @g()
66
declare i32 @__gxx_personality_v0(...)

0 commit comments

Comments
 (0)