[clang] [llvm] [Clang] Show inlining hints for __attribute__((warning/error)) (PR #174892)
Bill Wendling via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 19 15:52:01 PST 2026
================
@@ -6064,13 +6064,23 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
if (getDebugInfo() && TargetDecl && TargetDecl->hasAttr<MSAllocatorAttr>())
getDebugInfo()->addHeapAllocSiteMetadata(CI, RetTy->getPointeeType(), Loc);
- // Add metadata if calling an __attribute__((error(""))) or warning fn.
- if (TargetDecl && TargetDecl->hasAttr<ErrorAttr>()) {
- llvm::ConstantInt *Line =
- llvm::ConstantInt::get(Int64Ty, Loc.getRawEncoding());
- llvm::ConstantAsMetadata *MD = llvm::ConstantAsMetadata::get(Line);
- llvm::MDTuple *MDT = llvm::MDNode::get(getLLVMContext(), {MD});
- CI->setMetadata("srcloc", MDT);
+ // Add srcloc metadata for [[gnu::error/warning]] diagnostics. Track
+ // inline/static calls for the heuristic fallback when debug info is not
+ // available. This heuristic is conservative and best-effort since static or
+ // inline-annotated functions are still not guaranteed to be inlined.
+ if (TargetDecl) {
+ bool NeedSrcLoc = TargetDecl->hasAttr<ErrorAttr>();
+ if (!NeedSrcLoc) {
+ if (const auto *FD = dyn_cast<FunctionDecl>(TargetDecl))
+ NeedSrcLoc = FD->isInlined() || FD->hasAttr<AlwaysInlineAttr>() ||
+ FD->getStorageClass() == SC_Static ||
+ FD->isInAnonymousNamespace();
----------------
bwendling wrote:
The Line was just an idea. It probably won't help anything, because it will have to be stored somewhere no matter what.
https://github.com/llvm/llvm-project/pull/174892
More information about the cfe-commits
mailing list