[clang] [Clang][DebugInfo] Use macro expansion locations by default (PR #233289)
Snehasish Kumar via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 18 13:36:03 PDT 2026
https://github.com/snehasish created https://github.com/llvm/llvm-project/pull/233289
Sample PGO testing of -debug-info-macro-expansion-loc is complete. Make its expansion-location behavior unconditional and remove the temporary cc1 flag, code generation option, and location helper.
Update the macro debug-info regression test to check the default behavior, including function line and column locations, and document the removed flag in the release notes.
Fixes #175249
>From a50c25f0653a3fbd26571d7285b1d630831af1bd Mon Sep 17 00:00:00 2001
From: Snehasish Kumar <kumar.snehasish at gmail.com>
Date: Sun, 18 Oct 2026 18:51:05 +0000
Subject: [PATCH] [Clang][DebugInfo] Use macro expansion locations by default
Sample PGO testing of -debug-info-macro-expansion-loc is complete.
Make its expansion-location behavior unconditional and remove the
temporary cc1 flag, code generation option, and location helper.
Update the macro debug-info regression test to check the default
behavior, including function line and column locations, and document
the removed flag in the release notes.
Fixes #175249
---
clang/docs/ReleaseNotes.md | 4 ++++
clang/include/clang/Basic/DebugOptions.def | 4 ----
clang/include/clang/Options/Options.td | 4 ----
clang/lib/CodeGen/CGDebugInfo.cpp | 26 ++++++----------------
clang/test/DebugInfo/Generic/macro-info.c | 21 ++++++++---------
5 files changed, 20 insertions(+), 39 deletions(-)
diff --git a/clang/docs/ReleaseNotes.md b/clang/docs/ReleaseNotes.md
index 7d6347414cc5c8..a956787904b8a4 100644
--- a/clang/docs/ReleaseNotes.md
+++ b/clang/docs/ReleaseNotes.md
@@ -352,6 +352,10 @@ features cannot lower the translation-unit ABI level;
### Removed Compiler Flags
+- Removed the experimental `-cc1` flag `-debug-info-macro-expansion-loc`.
+ Debug information now always uses macro expansion locations for macro arguments.
+ (#GH175249)
+
### Attribute Changes in Clang
- Clang now properly propagates attributes on class and variable templates to their redeclarations, which will result in redeclarations not interfering with diagnostics. (#GH209812)
diff --git a/clang/include/clang/Basic/DebugOptions.def b/clang/include/clang/Basic/DebugOptions.def
index e496825d512743..480f1f41fad082 100644
--- a/clang/include/clang/Basic/DebugOptions.def
+++ b/clang/include/clang/Basic/DebugOptions.def
@@ -107,10 +107,6 @@ ENUM_DEBUGOPT(DebugInfo, DebugInfoKind, 4,
/// Whether to generate macro debug info.
DEBUGOPT(MacroDebugInfo, 1, 0, Compatible)
-/// Whether to use expansion location for debug info.
-/// TODO: #175249: Remove once testing is complete for sample pgo users.
-DEBUGOPT(DebugInfoMacroExpansionLoc, 1, 0, Compatible)
-
/// Tune the debug info for this debugger.
ENUM_DEBUGOPT(DebuggerTuning, DebuggerKind, 3,
DebuggerKind::Default, Compatible)
diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td
index 38d285b8268e15..f5f829bf85eadf 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -8128,10 +8128,6 @@ let Visibility = [CC1Option, CC1AsOption] in {
def debug_info_macro : Flag<["-"], "debug-info-macro">,
HelpText<"Emit macro debug information">,
MarshallingInfoFlag<CodeGenOpts<"MacroDebugInfo">>;
-def debug_info_macro_expansion_loc
- : Flag<["-"], "debug-info-macro-expansion-loc">,
- HelpText<"Use expansion location for debug info for multi line macros">,
- MarshallingInfoFlag<CodeGenOpts<"DebugInfoMacroExpansionLoc">>;
def default_function_attr : Separate<["-"], "default-function-attr">,
HelpText<"Apply given attribute to all functions">,
MarshallingInfoStringVector<CodeGenOpts<"DefaultFunctionAttrs">>;
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 93428777b9b24c..57cee670c3b9dd 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -59,13 +59,6 @@
using namespace clang;
using namespace clang::CodeGen;
-static SourceLocation getMacroDebugLoc(const CodeGenModule &CGM,
- SourceLocation Loc) {
- if (CGM.getCodeGenOpts().DebugInfoMacroExpansionLoc)
- return Loc;
- return CGM.getContext().getSourceManager().getFileLoc(Loc);
-}
-
static uint32_t getTypeAlignIfRequired(const Type *Ty, const ASTContext &Ctx) {
auto TI = Ctx.getTypeInfo(Ty);
if (TI.isAlignRequired())
@@ -353,7 +346,7 @@ void CGDebugInfo::setLocation(SourceLocation Loc) {
return;
SourceManager &SM = CGM.getContext().getSourceManager();
- SourceLocation NewLoc = SM.getExpansionLoc(getMacroDebugLoc(CGM, Loc));
+ SourceLocation NewLoc = SM.getExpansionLoc(Loc);
if (CurLoc != NewLoc) {
CurLoc = NewLoc;
CurLocFile = nullptr;
@@ -596,7 +589,6 @@ llvm::DIFile *CGDebugInfo::getOrCreateFile(SourceLocation Loc) {
FileName = TheCU->getFile()->getFilename();
CSInfo = TheCU->getFile()->getChecksum();
} else {
- Loc = getMacroDebugLoc(CGM, Loc);
if (Loc == CurLoc && CurLocFile)
return CurLocFile;
@@ -627,8 +619,7 @@ llvm::DIFile *CGDebugInfo::getOrCreateFile(SourceLocation Loc) {
if (CSKind)
CSInfo.emplace(*CSKind, Checksum);
}
- return createFile(FileName, CSInfo,
- getSource(SM, SM.getFileID(getMacroDebugLoc(CGM, Loc))));
+ return createFile(FileName, CSInfo, getSource(SM, SM.getFileID(Loc)));
}
llvm::DIFile *CGDebugInfo::createFile(
@@ -679,10 +670,9 @@ unsigned CGDebugInfo::getLineNumber(SourceLocation Loc) {
if (Loc.isInvalid())
return 0;
SourceManager &SM = CGM.getContext().getSourceManager();
- SourceLocation DebugLoc = getMacroDebugLoc(CGM, Loc);
- if (DebugLoc == CurLoc)
+ if (Loc == CurLoc)
return CurLocLine;
- return SM.getPresumedLoc(DebugLoc).getLine();
+ return SM.getPresumedLoc(Loc).getLine();
}
unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc) {
@@ -694,7 +684,7 @@ unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc) {
if (Loc.isInvalid() && CurLoc.isInvalid())
return 0;
SourceManager &SM = CGM.getContext().getSourceManager();
- SourceLocation DebugLoc = Loc.isValid() ? getMacroDebugLoc(CGM, Loc) : CurLoc;
+ SourceLocation DebugLoc = Loc.isValid() ? Loc : CurLoc;
if (DebugLoc == CurLoc)
return CurLocColumn;
PresumedLoc PLoc = SM.getPresumedLoc(DebugLoc);
@@ -5317,9 +5307,7 @@ void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc) {
// Update our current location
setLocation(Loc);
- if (CurLoc.isInvalid() ||
- (CGM.getCodeGenOpts().DebugInfoMacroExpansionLoc && CurLoc.isMacroID()) ||
- LexicalBlockStack.empty())
+ if (CurLoc.isInvalid() || LexicalBlockStack.empty())
return;
llvm::MDNode *Scope = LexicalBlockStack.back();
@@ -6592,7 +6580,7 @@ void CGDebugInfo::AddStringLiteralDebugInfo(llvm::GlobalVariable *GV,
const StringLiteral *S) {
SourceLocation Loc = S->getStrTokenLoc(0);
SourceManager &SM = CGM.getContext().getSourceManager();
- PresumedLoc PLoc = SM.getPresumedLoc(getMacroDebugLoc(CGM, Loc));
+ PresumedLoc PLoc = SM.getPresumedLoc(Loc);
if (!PLoc.isValid())
return;
diff --git a/clang/test/DebugInfo/Generic/macro-info.c b/clang/test/DebugInfo/Generic/macro-info.c
index 8d9d2502be03f5..4b95588e6bd331 100644
--- a/clang/test/DebugInfo/Generic/macro-info.c
+++ b/clang/test/DebugInfo/Generic/macro-info.c
@@ -1,5 +1,4 @@
-// RUN: %clang_cc1 %s -debug-info-kind=standalone -emit-llvm -o - | FileCheck %s --check-prefix=NEW
-// RUN: %clang_cc1 %s -debug-info-kind=standalone -emit-llvm -debug-info-macro-expansion-loc -o - | FileCheck %s --check-prefix=OLD
+// RUN: %clang_cc1 %s -debug-info-kind=standalone -emit-llvm -o - | FileCheck %s
#define GLOBAL(num) global## num
#define DECL_GLOBAL(x) int x
@@ -10,13 +9,11 @@
SAME_ORDER(
int
-// NEW: DIGlobalVariable(name: "global",{{.*}} line: [[@LINE+2]]
-// OLD: DIGlobalVariable(name: "global",{{.*}} line: [[@LINE-3]]
+// CHECK: DIGlobalVariable(name: "global",{{.*}} line: [[@LINE-2]]
GLOBAL // <- global
() = 42,
const char* s() {
-// NEW: DIGlobalVariable({{.*}}line: [[@LINE+2]],{{.*}} type: [[TYPEID:![0-9]+]]
-// OLD: DIGlobalVariable({{.*}}line: [[@LINE-8]],{{.*}} type: [[TYPEID:![0-9]+]]
+// CHECK: DIGlobalVariable({{.*}}line: [[@LINE-6]],{{.*}} type: [[TYPEID:![0-9]+]]
return "1234567890";
}
)
@@ -24,10 +21,8 @@ SAME_ORDER(
SWAP_ORDER(
int GLOBAL( // <- global2
2) = 43,
-// NEW: DIGlobalVariable(name: "global3",{{.*}} line: [[@LINE+5]]
-// NEW: DIGlobalVariable(name: "global2",{{.*}} line: [[@LINE-3]]
-// OLD: DIGlobalVariable(name: "global3",{{.*}} line: [[@LINE-5]]
-// OLD: DIGlobalVariable(name: "global2",{{.*}} line: [[@LINE-6]]
+// CHECK: DIGlobalVariable(name: "global3",{{.*}} line: [[@LINE-3]]
+// CHECK: DIGlobalVariable(name: "global2",{{.*}} line: [[@LINE-4]]
DECL_GLOBAL(
GLOBAL( // <- global3
3)) = 44
@@ -35,7 +30,9 @@ SWAP_ORDER(
DECL_GLOBAL(
-// NEW: DIGlobalVariable(name: "global4",{{.*}} line: [[@LINE+2]]
-// OLD: DIGlobalVariable(name: "global4",{{.*}} line: [[@LINE-2]]
+// CHECK: DIGlobalVariable(name: "global4",{{.*}} line: [[@LINE-1]]
GLOBAL( // <- global4
4));
+
+// CHECK: ![[SP:[0-9]+]] = distinct !DISubprogram(name: "s",{{.*}} line: [[@LINE-27]],
+// CHECK: !DILocation(line: [[@LINE-28]], column: 1, scope: ![[SP]])
More information about the cfe-commits
mailing list