[llvm] Warn on misuse of DiagnosticInfo classes that hold Twines (PR #137397)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 25 14:15:16 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Justin Bogner (bogner)
<details>
<summary>Changes</summary>
This annotates the `Twine` passed to the constructors of the various DiagnosticInfo subclasses with `[[clang::lifetimebound]]`, which causes us to warn when we would try to print the twine after it had already been destructed.
We also update `DiagnosticInfoUnsupported` to hold a `const Twine &` like all of the other DiagnosticInfo classes, since this warning allows us to clean up all of the places where it was being used incorrectly.
---
Patch is 31.91 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/137397.diff
20 Files Affected:
- (modified) llvm/include/llvm/IR/DiagnosticInfo.h (+18-12)
- (modified) llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (+1-1)
- (modified) llvm/lib/LTO/LTOCodeGenerator.cpp (+2-1)
- (modified) llvm/lib/LTO/ThinLTOCodeGenerator.cpp (+1-1)
- (modified) llvm/lib/Linker/LinkDiagnosticInfo.h (+2-1)
- (modified) llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp (+7-10)
- (modified) llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp (+3-3)
- (modified) llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp (+12-17)
- (modified) llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp (+2-3)
- (modified) llvm/lib/Target/AMDGPU/SIISelLowering.cpp (+17-24)
- (modified) llvm/lib/Target/AMDGPU/SIInstrInfo.cpp (+3-3)
- (modified) llvm/lib/Target/AMDGPU/SIMemoryLegalizer.cpp (+4-4)
- (modified) llvm/lib/Target/ARM/ARMISelLowering.cpp (+13-17)
- (modified) llvm/lib/Target/ARM/ARMMCInstLower.cpp (+4-5)
- (modified) llvm/lib/Target/BPF/BPFPreserveStaticOffset.cpp (+2-3)
- (modified) llvm/lib/Target/BPF/BPFRegisterInfo.cpp (+2-3)
- (modified) llvm/lib/Target/DirectX/DXILOpLowering.cpp (+3-3)
- (modified) llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp (+2-1)
- (modified) llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp (+6-9)
- (modified) llvm/lib/Transforms/Instrumentation/KCFI.cpp (+1-1)
``````````diff
diff --git a/llvm/include/llvm/IR/DiagnosticInfo.h b/llvm/include/llvm/IR/DiagnosticInfo.h
index a1113134f6a34..9908e03ad371f 100644
--- a/llvm/include/llvm/IR/DiagnosticInfo.h
+++ b/llvm/include/llvm/IR/DiagnosticInfo.h
@@ -146,11 +146,12 @@ class DiagnosticInfoGeneric : public DiagnosticInfo {
/// \p MsgStr is the message to be reported to the frontend.
/// This class does not copy \p MsgStr, therefore the reference must be valid
/// for the whole life time of the Diagnostic.
- DiagnosticInfoGeneric(const Twine &MsgStr,
+ DiagnosticInfoGeneric(const Twine &MsgStr LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfo(DK_Generic, Severity), MsgStr(MsgStr) {}
- DiagnosticInfoGeneric(const Instruction *I, const Twine &ErrMsg,
+ DiagnosticInfoGeneric(const Instruction *I,
+ const Twine &ErrMsg LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfo(DK_Generic, Severity), MsgStr(ErrMsg), Inst(I) {}
@@ -181,7 +182,8 @@ class DiagnosticInfoInlineAsm : public DiagnosticInfo {
/// \p MsgStr gives the message.
/// This class does not copy \p MsgStr, therefore the reference must be valid
/// for the whole life time of the Diagnostic.
- DiagnosticInfoInlineAsm(uint64_t LocCookie, const Twine &MsgStr,
+ DiagnosticInfoInlineAsm(uint64_t LocCookie,
+ const Twine &MsgStr LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error);
/// \p Instr gives the original instruction that triggered the diagnostic.
@@ -189,7 +191,8 @@ class DiagnosticInfoInlineAsm : public DiagnosticInfo {
/// This class does not copy \p MsgStr, therefore the reference must be valid
/// for the whole life time of the Diagnostic.
/// Same for \p I.
- DiagnosticInfoInlineAsm(const Instruction &I, const Twine &MsgStr,
+ DiagnosticInfoInlineAsm(const Instruction &I,
+ const Twine &MsgStr LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error);
uint64_t getLocCookie() const { return LocCookie; }
@@ -258,15 +261,16 @@ class DiagnosticInfoIgnoringInvalidDebugMetadata : public DiagnosticInfo {
class DiagnosticInfoSampleProfile : public DiagnosticInfo {
public:
DiagnosticInfoSampleProfile(StringRef FileName, unsigned LineNum,
- const Twine &Msg,
+ const Twine &Msg LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfo(DK_SampleProfile, Severity), FileName(FileName),
LineNum(LineNum), Msg(Msg) {}
- DiagnosticInfoSampleProfile(StringRef FileName, const Twine &Msg,
+ DiagnosticInfoSampleProfile(StringRef FileName,
+ const Twine &Msg LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfo(DK_SampleProfile, Severity), FileName(FileName),
Msg(Msg) {}
- DiagnosticInfoSampleProfile(const Twine &Msg,
+ DiagnosticInfoSampleProfile(const Twine &Msg LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfo(DK_SampleProfile, Severity), Msg(Msg) {}
@@ -296,7 +300,8 @@ class DiagnosticInfoSampleProfile : public DiagnosticInfo {
/// Diagnostic information for the PGO profiler.
class DiagnosticInfoPGOProfile : public DiagnosticInfo {
public:
- DiagnosticInfoPGOProfile(const char *FileName, const Twine &Msg,
+ DiagnosticInfoPGOProfile(const char *FileName,
+ const Twine &Msg LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfo(DK_PGOProfile, Severity), FileName(FileName), Msg(Msg) {}
@@ -364,7 +369,7 @@ class DiagnosticInfoWithLocationBase : public DiagnosticInfo {
/// Return the absolute path tot the file.
std::string getAbsolutePath() const;
-
+
const Function &getFunction() const { return Fn; }
DiagnosticLocation getLocation() const { return Loc; }
@@ -1062,7 +1067,7 @@ class DiagnosticInfoOptimizationFailure : public DiagnosticInfoIROptimization {
/// Diagnostic information for unsupported feature in backend.
class DiagnosticInfoUnsupported : public DiagnosticInfoWithLocationBase {
private:
- Twine Msg;
+ const Twine &Msg;
public:
/// \p Fn is the function where the diagnostic is being emitted. \p Loc is
@@ -1072,7 +1077,7 @@ class DiagnosticInfoUnsupported : public DiagnosticInfoWithLocationBase {
/// copy this message, so this reference must be valid for the whole life time
/// of the diagnostic.
DiagnosticInfoUnsupported(
- const Function &Fn, const Twine &Msg,
+ const Function &Fn, const Twine &Msg LLVM_LIFETIME_BOUND,
const DiagnosticLocation &Loc = DiagnosticLocation(),
DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfoWithLocationBase(DK_Unsupported, Severity, Fn, Loc),
@@ -1090,7 +1095,8 @@ class DiagnosticInfoUnsupported : public DiagnosticInfoWithLocationBase {
/// Diagnostic information for MisExpect analysis.
class DiagnosticInfoMisExpect : public DiagnosticInfoWithLocationBase {
public:
- DiagnosticInfoMisExpect(const Instruction *Inst, const Twine &Msg);
+ DiagnosticInfoMisExpect(const Instruction *Inst,
+ const Twine &Msg LLVM_LIFETIME_BOUND);
/// \see DiagnosticInfo::print.
void print(DiagnosticPrinter &DP) const override;
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index c9415292e88f7..79ef9c228b7d7 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -709,7 +709,7 @@ class LoweringDiagnosticInfo : public DiagnosticInfo {
const Twine &Msg;
public:
- LoweringDiagnosticInfo(const Twine &DiagMsg,
+ LoweringDiagnosticInfo(const Twine &DiagMsg LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfo(DK_Lowering, Severity), Msg(DiagMsg) {}
void print(DiagnosticPrinter &DP) const override { DP << Msg; }
diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp
index 70b7135fcbef0..e15d2c57d0697 100644
--- a/llvm/lib/LTO/LTOCodeGenerator.cpp
+++ b/llvm/lib/LTO/LTOCodeGenerator.cpp
@@ -746,7 +746,8 @@ namespace {
class LTODiagnosticInfo : public DiagnosticInfo {
const Twine &Msg;
public:
- LTODiagnosticInfo(const Twine &DiagMsg, DiagnosticSeverity Severity=DS_Error)
+ LTODiagnosticInfo(const Twine &DiagMsg LLVM_LIFETIME_BOUND,
+ DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfo(DK_Linker, Severity), Msg(DiagMsg) {}
void print(DiagnosticPrinter &DP) const override { DP << Msg; }
};
diff --git a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp
index 9e7f8187fe49c..1e93f72777df4 100644
--- a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp
+++ b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp
@@ -167,7 +167,7 @@ namespace {
class ThinLTODiagnosticInfo : public DiagnosticInfo {
const Twine &Msg;
public:
- ThinLTODiagnosticInfo(const Twine &DiagMsg,
+ ThinLTODiagnosticInfo(const Twine &DiagMsg LLVM_LIFETIME_BOUND,
DiagnosticSeverity Severity = DS_Error)
: DiagnosticInfo(DK_Linker, Severity), Msg(DiagMsg) {}
void print(DiagnosticPrinter &DP) const override { DP << Msg; }
diff --git a/llvm/lib/Linker/LinkDiagnosticInfo.h b/llvm/lib/Linker/LinkDiagnosticInfo.h
index 30c16abaf5090..fdae1b79a9e17 100644
--- a/llvm/lib/Linker/LinkDiagnosticInfo.h
+++ b/llvm/lib/Linker/LinkDiagnosticInfo.h
@@ -16,7 +16,8 @@ class LinkDiagnosticInfo : public DiagnosticInfo {
const Twine &Msg;
public:
- LinkDiagnosticInfo(DiagnosticSeverity Severity, const Twine &Msg);
+ LinkDiagnosticInfo(DiagnosticSeverity Severity,
+ const Twine &Msg LLVM_LIFETIME_BOUND);
void print(DiagnosticPrinter &DP) const override;
};
}
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
index 236c373e70250..9dd25439428e2 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
@@ -1383,9 +1383,8 @@ SDValue AMDGPUTargetLowering::lowerUnhandledCall(CallLoweringInfo &CLI,
else if (const GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
FuncName = G->getGlobal()->getName();
- DiagnosticInfoUnsupported NoCalls(
- Fn, Reason + FuncName, CLI.DL.getDebugLoc());
- DAG.getContext()->diagnose(NoCalls);
+ DAG.getContext()->diagnose(
+ DiagnosticInfoUnsupported(Fn, Reason + FuncName, CLI.DL.getDebugLoc()));
if (!CLI.IsTailCall) {
for (ISD::InputArg &Arg : CLI.Ins)
@@ -1404,9 +1403,8 @@ SDValue AMDGPUTargetLowering::LowerDYNAMIC_STACKALLOC(SDValue Op,
SelectionDAG &DAG) const {
const Function &Fn = DAG.getMachineFunction().getFunction();
- DiagnosticInfoUnsupported NoDynamicAlloca(Fn, "unsupported dynamic alloca",
- SDLoc(Op).getDebugLoc());
- DAG.getContext()->diagnose(NoDynamicAlloca);
+ DAG.getContext()->diagnose(DiagnosticInfoUnsupported(
+ Fn, "unsupported dynamic alloca", SDLoc(Op).getDebugLoc()));
auto Ops = {DAG.getConstant(0, SDLoc(), Op.getValueType()), Op.getOperand(0)};
return DAG.getMergeValues(Ops, SDLoc());
}
@@ -1521,10 +1519,9 @@ SDValue AMDGPUTargetLowering::LowerGlobalAddress(AMDGPUMachineFunction* MFI,
!AMDGPU::isNamedBarrier(*cast<GlobalVariable>(GV))) {
SDLoc DL(Op);
const Function &Fn = DAG.getMachineFunction().getFunction();
- DiagnosticInfoUnsupported BadLDSDecl(
- Fn, "local memory global used by non-kernel function",
- DL.getDebugLoc(), DS_Warning);
- DAG.getContext()->diagnose(BadLDSDecl);
+ DAG.getContext()->diagnose(DiagnosticInfoUnsupported(
+ Fn, "local memory global used by non-kernel function",
+ DL.getDebugLoc(), DS_Warning));
// We currently don't have a way to correctly allocate LDS objects that
// aren't directly associated with a kernel. We do force inlining of
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
index 2fa03e3964207..6612fbebe1ee6 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructionSelector.cpp
@@ -2340,9 +2340,9 @@ bool AMDGPUInstructionSelector::selectG_INTRINSIC_W_SIDE_EFFECTS(
case Intrinsic::amdgcn_exp_compr:
if (!STI.hasCompressedExport()) {
Function &F = I.getMF()->getFunction();
- DiagnosticInfoUnsupported NoFpRet(
- F, "intrinsic not supported on subtarget", I.getDebugLoc(), DS_Error);
- F.getContext().diagnose(NoFpRet);
+ F.getContext().diagnose(
+ DiagnosticInfoUnsupported(F, "intrinsic not supported on subtarget",
+ I.getDebugLoc(), DS_Error));
return false;
}
break;
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
index beb6432170970..cadf4915247bd 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
@@ -3005,10 +3005,9 @@ bool AMDGPULegalizerInfo::legalizeGlobalValue(
GV->getName() != "llvm.amdgcn.module.lds" &&
!AMDGPU::isNamedBarrier(*cast<GlobalVariable>(GV))) {
const Function &Fn = MF.getFunction();
- DiagnosticInfoUnsupported BadLDSDecl(
- Fn, "local memory global used by non-kernel function", MI.getDebugLoc(),
- DS_Warning);
- Fn.getContext().diagnose(BadLDSDecl);
+ Fn.getContext().diagnose(DiagnosticInfoUnsupported(
+ Fn, "local memory global used by non-kernel function",
+ MI.getDebugLoc(), DS_Warning));
// We currently don't have a way to correctly allocate LDS objects that
// aren't directly associated with a kernel. We do force inlining of
@@ -7037,11 +7036,9 @@ bool AMDGPULegalizerInfo::legalizeDebugTrap(MachineInstr &MI,
// accordingly
if (!ST.isTrapHandlerEnabled() ||
ST.getTrapHandlerAbi() != GCNSubtarget::TrapHandlerAbi::AMDHSA) {
- DiagnosticInfoUnsupported NoTrap(B.getMF().getFunction(),
- "debugtrap handler not supported",
- MI.getDebugLoc(), DS_Warning);
- LLVMContext &Ctx = B.getMF().getFunction().getContext();
- Ctx.diagnose(NoTrap);
+ Function &Fn = B.getMF().getFunction();
+ Fn.getContext().diagnose(DiagnosticInfoUnsupported(
+ Fn, "debugtrap handler not supported", MI.getDebugLoc(), DS_Warning));
} else {
// Insert debug-trap instruction
B.buildInstr(AMDGPU::S_TRAP)
@@ -7069,10 +7066,9 @@ bool AMDGPULegalizerInfo::legalizeBVHIntersectRayIntrinsic(
Register TDescr = MI.getOperand(7).getReg();
if (!ST.hasGFX10_AEncoding()) {
- DiagnosticInfoUnsupported BadIntrin(B.getMF().getFunction(),
- "intrinsic not supported on subtarget",
- MI.getDebugLoc());
- B.getMF().getFunction().getContext().diagnose(BadIntrin);
+ Function &Fn = B.getMF().getFunction();
+ Fn.getContext().diagnose(DiagnosticInfoUnsupported(
+ Fn, "intrinsic not supported on subtarget", MI.getDebugLoc()));
return false;
}
@@ -7222,10 +7218,9 @@ bool AMDGPULegalizerInfo::legalizeBVHDualOrBVH8IntersectRayIntrinsic(
Register TDescr = MI.getOperand(10).getReg();
if (!ST.hasBVHDualAndBVH8Insts()) {
- DiagnosticInfoUnsupported BadIntrin(B.getMF().getFunction(),
- "intrinsic not supported on subtarget",
- MI.getDebugLoc());
- B.getMF().getFunction().getContext().diagnose(BadIntrin);
+ Function &Fn = B.getMF().getFunction();
+ Fn.getContext().diagnose(DiagnosticInfoUnsupported(
+ Fn, "intrinsic not supported on subtarget", MI.getDebugLoc()));
return false;
}
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
index 9847fbf108b0c..7a2a7fc250e27 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
@@ -128,12 +128,11 @@ static StringRef getAsConstantStr(Value *V) {
}
static void diagnoseInvalidFormatString(const CallBase *CI) {
- DiagnosticInfoUnsupported UnsupportedFormatStr(
+ CI->getContext().diagnose(DiagnosticInfoUnsupported(
*CI->getParent()->getParent(),
"printf format string must be a trivially resolved constant string "
"global variable",
- CI->getDebugLoc());
- CI->getContext().diagnose(UnsupportedFormatStr);
+ CI->getDebugLoc()));
}
bool AMDGPUPrintfRuntimeBindingImpl::lowerPrintfForGpu(Module &M) {
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index c05ba42d999e9..f4bda63e94288 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -2849,9 +2849,8 @@ SDValue SITargetLowering::LowerFormalArguments(
bool IsError = false;
if (Subtarget->isAmdHsaOS() && AMDGPU::isGraphics(CallConv)) {
- DiagnosticInfoUnsupported NoGraphicsHSA(
- Fn, "unsupported non-compute shaders with HSA", DL.getDebugLoc());
- DAG.getContext()->diagnose(NoGraphicsHSA);
+ DAG.getContext()->diagnose(DiagnosticInfoUnsupported(
+ Fn, "unsupported non-compute shaders with HSA", DL.getDebugLoc()));
IsError = true;
}
@@ -3075,11 +3074,10 @@ SDValue SITargetLowering::LowerFormalArguments(
if (Arg.isOrigArg()) {
Argument *OrigArg = Fn.getArg(Arg.getOrigArgIndex());
if (OrigArg->hasAttribute("amdgpu-hidden-argument")) {
- DiagnosticInfoUnsupported NonPreloadHiddenArg(
+ DAG.getContext()->diagnose(DiagnosticInfoUnsupported(
*OrigArg->getParent(),
"hidden argument in kernel signature was not preloaded",
- DL.getDebugLoc());
- DAG.getContext()->diagnose(NonPreloadHiddenArg);
+ DL.getDebugLoc()));
}
}
@@ -7283,11 +7281,10 @@ SDValue SITargetLowering::lowerDEBUGTRAP(SDValue Op, SelectionDAG &DAG) const {
if (!Subtarget->isTrapHandlerEnabled() ||
Subtarget->getTrapHandlerAbi() != GCNSubtarget::TrapHandlerAbi::AMDHSA) {
- DiagnosticInfoUnsupported NoTrap(MF.getFunction(),
- "debugtrap handler not supported",
- Op.getDebugLoc(), DS_Warning);
LLVMContext &Ctx = MF.getFunction().getContext();
- Ctx.diagnose(NoTrap);
+ Ctx.diagnose(DiagnosticInfoUnsupported(MF.getFunction(),
+ "debugtrap handler not supported",
+ Op.getDebugLoc(), DS_Warning));
return Chain;
}
@@ -8060,19 +8057,17 @@ SDValue SITargetLowering::lowerImplicitZextParam(SelectionDAG &DAG, SDValue Op,
static SDValue emitNonHSAIntrinsicError(SelectionDAG &DAG, const SDLoc &DL,
EVT VT) {
- DiagnosticInfoUnsupported BadIntrin(DAG.getMachineFunction().getFunction(),
- "non-hsa intrinsic with hsa target",
- DL.getDebugLoc());
- DAG.getContext()->diagnose(BadIntrin);
+ DAG.getContext()->diagnose(DiagnosticInfoUnsupported(
+ DAG.getMachineFunction().getFunction(),
+ "non-hsa intrinsic with hsa target", DL.getDebugLoc()));
return DAG.getPOISON(VT);
}
static SDValue emitRemovedIntrinsicError(SelectionDAG &DAG, const SDLoc &DL,
EVT VT) {
- DiagnosticInfoUnsupported BadIntrin(DAG.getMachineFunction().getFunction(),
- "intrinsic not supported on subtarget",
- DL.getDebugLoc());
- DAG.getContext()->diagnose(BadIntrin);
+ DAG.getContext()->diagnose(DiagnosticInfoUnsupported(
+ DAG.getMachineFunction().getFunction(),
+ "intrinsic not supported on subtarget", DL.getDebugLoc()));
return DAG.getPOISON(VT);
}
@@ -8781,10 +8776,9 @@ SDValue SITargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
case Intrinsic::amdgcn_dispatch_ptr:
case Intrinsic::amdgcn_queue_ptr: {
if (!Subtarget->isAmdHsaOrMesa(MF.getFunction())) {
- DiagnosticInfoUnsupported BadIntrin(
+ DAG.getContext()->diagnose(DiagnosticInfoUnsupported(
MF.getFunction(), "unsupported hsa intrinsic without hsa target",
- DL.getDebugLoc());
- DAG.getContext()->diagnose(BadIntrin);
+ DL.getDebugLoc()));
return DAG.getPOISON(VT);
}
@@ -9887,10 +9881,9 @@ SDValue SITargetLowering::LowerINTRINSIC_VOID(SDValue Op,
switch (IntrinsicID) {
case Intrinsic::amdgcn_exp_compr: {
if (!Subtarget->hasCompressedExport()) {
- DiagnosticInfoUnsupported BadIntrin(
+ DAG.getContext()->diagnose(DiagnosticInfoUnsupported(
DAG.getMachineFunction().getFunction(),
- "intrinsic not supported on subtarget", DL.getDebugLoc());
- DAG.getContext()->diagnose(BadIntrin);
+ "intrinsic not supported on subtarget", DL.getDebugLoc()));
}
SDValue Src0 = Op.getOperand(4);
SDValue Src1 = Op.getOperand(5);
diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
index e6d54860df221..e19c5d1a3174b 100644
--- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
@@ -623,12 +623,12 @@ static void reportIllegalCopy(const SIInstrInfo *TII, MachineBasicBlock &MBB,
MCRegister SrcReg, bool KillSrc,
const char *Msg = "illegal VGPR to SGPR copy") {
MachineFunction *MF = MBB.getParent();
- DiagnosticInfoUnsupported IllegalCopy(MF->getFunction(), Msg, DL, DS_Error);
+
LLVMContext &C = MF->getFunction().getContext();
- C.diagnose(IllegalCopy);
+ C.diagnose(DiagnosticInfoUnsupported(MF->getFunction(), Msg, DL, DS_Error...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/137397
More information about the llvm-commits
mailing list