[llvm] DiagnosticInfo: Fix missing LLVM_LIFETIME_BOUND on Twine arguments (PR #190331)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 3 03:22:29 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
Fix use after free errors in DiagnosticInfoResourceLimit uses.
---
Full diff: https://github.com/llvm/llvm-project/pull/190331.diff
2 Files Affected:
- (modified) llvm/include/llvm/IR/DiagnosticInfo.h (+2-1)
- (modified) llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp (+16-22)
``````````diff
diff --git a/llvm/include/llvm/IR/DiagnosticInfo.h b/llvm/include/llvm/IR/DiagnosticInfo.h
index 4580dac630847..d72b1f42d84cf 100644
--- a/llvm/include/llvm/IR/DiagnosticInfo.h
+++ b/llvm/include/llvm/IR/DiagnosticInfo.h
@@ -480,7 +480,8 @@ class LLVM_ABI DiagnosticInfoResourceLimit
public:
/// \p The function that is concerned by this stack size diagnostic.
/// \p The computed stack size.
- DiagnosticInfoResourceLimit(const Function &Fn, const Twine &ResourceName,
+ DiagnosticInfoResourceLimit(const Function &Fn,
+ const Twine &ResourceName LLVM_LIFETIME_BOUND,
uint64_t ResourceSize, uint64_t ResourceLimit,
DiagnosticSeverity Severity = DS_Warning,
DiagnosticKind Kind = DK_ResourceLimit);
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
index 8bb45cd1ae618..19ad73f4fb421 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
@@ -426,10 +426,9 @@ void AMDGPUAsmPrinter::validateMCResourceInfo(Function &F) {
if (NumSGPRSymbol->isVariable() &&
TryGetMCExprValue(NumSGPRSymbol->getVariableValue(), NumSgpr) &&
NumSgpr > MaxAddressableNumSGPRs) {
- DiagnosticInfoResourceLimit Diag(F, "addressable scalar registers",
- NumSgpr, MaxAddressableNumSGPRs,
- DS_Error, DK_ResourceLimit);
- F.getContext().diagnose(Diag);
+ F.getContext().diagnose(DiagnosticInfoResourceLimit(
+ F, "addressable scalar registers", NumSgpr, MaxAddressableNumSGPRs,
+ DS_Error, DK_ResourceLimit));
return;
}
}
@@ -455,10 +454,9 @@ void AMDGPUAsmPrinter::validateMCResourceInfo(Function &F) {
STM.hasSGPRInitBug()) {
unsigned MaxAddressableNumSGPRs = STM.getAddressableNumSGPRs();
if (NumSgpr > MaxAddressableNumSGPRs) {
- DiagnosticInfoResourceLimit Diag(F, "scalar registers", NumSgpr,
- MaxAddressableNumSGPRs, DS_Error,
- DK_ResourceLimit);
- F.getContext().diagnose(Diag);
+ F.getContext().diagnose(DiagnosticInfoResourceLimit(
+ F, "scalar registers", NumSgpr, MaxAddressableNumSGPRs, DS_Error,
+ DK_ResourceLimit));
return;
}
}
@@ -1065,10 +1063,9 @@ void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,
NumSgpr > MaxAddressableNumSGPRs) {
// This can happen due to a compiler bug or when using inline asm.
LLVMContext &Ctx = MF.getFunction().getContext();
- DiagnosticInfoResourceLimit Diag(
+ Ctx.diagnose(DiagnosticInfoResourceLimit(
MF.getFunction(), "addressable scalar registers", NumSgpr,
- MaxAddressableNumSGPRs, DS_Error, DK_ResourceLimit);
- Ctx.diagnose(Diag);
+ MaxAddressableNumSGPRs, DS_Error, DK_ResourceLimit));
ProgInfo.NumSGPR = CreateExpr(MaxAddressableNumSGPRs - 1);
}
}
@@ -1121,10 +1118,9 @@ void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,
// This can happen due to a compiler bug or when using inline asm to use
// the registers which are usually reserved for vcc etc.
LLVMContext &Ctx = MF.getFunction().getContext();
- DiagnosticInfoResourceLimit Diag(MF.getFunction(), "scalar registers",
- NumSgpr, MaxAddressableNumSGPRs,
- DS_Error, DK_ResourceLimit);
- Ctx.diagnose(Diag);
+ Ctx.diagnose(DiagnosticInfoResourceLimit(
+ MF.getFunction(), "scalar registers", NumSgpr, MaxAddressableNumSGPRs,
+ DS_Error, DK_ResourceLimit));
ProgInfo.NumSGPR = CreateExpr(MaxAddressableNumSGPRs);
ProgInfo.NumSGPRsForWavesPerEU = CreateExpr(MaxAddressableNumSGPRs);
}
@@ -1139,18 +1135,16 @@ void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo,
if (MFI->getNumUserSGPRs() > STM.getMaxNumUserSGPRs()) {
LLVMContext &Ctx = MF.getFunction().getContext();
- DiagnosticInfoResourceLimit Diag(MF.getFunction(), "user SGPRs",
- MFI->getNumUserSGPRs(),
- STM.getMaxNumUserSGPRs(), DS_Error);
- Ctx.diagnose(Diag);
+ Ctx.diagnose(DiagnosticInfoResourceLimit(
+ MF.getFunction(), "user SGPRs", MFI->getNumUserSGPRs(),
+ STM.getMaxNumUserSGPRs(), DS_Error));
}
if (MFI->getLDSSize() > STM.getAddressableLocalMemorySize()) {
LLVMContext &Ctx = MF.getFunction().getContext();
- DiagnosticInfoResourceLimit Diag(
+ Ctx.diagnose(DiagnosticInfoResourceLimit(
MF.getFunction(), "local memory", MFI->getLDSSize(),
- STM.getAddressableLocalMemorySize(), DS_Error);
- Ctx.diagnose(Diag);
+ STM.getAddressableLocalMemorySize(), DS_Error));
}
// The MCExpr equivalent of getNumSGPRBlocks/getNumVGPRBlocks:
// (alignTo(max(1u, NumGPR), GPREncodingGranule) / GPREncodingGranule) - 1
``````````
</details>
https://github.com/llvm/llvm-project/pull/190331
More information about the llvm-commits
mailing list