[clang] [llvm] [Clang] Show inlining hints for __attribute__((warning/error)) (PR #174892)

Justin Stitt via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 8 16:55:31 PST 2026


================
@@ -6048,13 +6048,22 @@ 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 __attribute__((error/warning)) diagnostics.
+  // In heuristic mode, also track inline/static calls for inlining chain.
+  if (TargetDecl) {
+    bool NeedSrcLoc = TargetDecl->hasAttr<ErrorAttr>();
+    if (!NeedSrcLoc && CGM.getCodeGenOpts().getInliningChain() ==
+                           CodeGenOptions::Inlining_Heuristic) {
+      if (const auto *FD = dyn_cast<FunctionDecl>(TargetDecl))
+        NeedSrcLoc = FD->isInlined() || FD->isInlineSpecified() ||
+                     FD->hasAttr<AlwaysInlineAttr>() ||
+                     FD->getStorageClass() == SC_Static;
----------------
JustinStitt wrote:

Done with [`1a22581` (#174892)](https://github.com/llvm/llvm-project/pull/174892/commits/1a2258184323622af390946c70b63afb12762276)

https://github.com/llvm/llvm-project/pull/174892


More information about the llvm-commits mailing list