Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions clang/lib/CodeGen/CGDebugInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ void CGDebugInfo::setLocation(SourceLocation Loc) {
if (Loc.isInvalid())
return;

CurLoc = CGM.getContext().getSourceManager().getExpansionLoc(Loc);
CurLoc = CGM.getContext().getSourceManager().getFileLoc(Loc);

// If we've changed files in the middle of a lexical scope go ahead
// and create a new lexical scope with file node if it's different
Expand Down Expand Up @@ -545,7 +545,7 @@ llvm::DIFile *CGDebugInfo::getOrCreateFile(SourceLocation Loc) {
FileName = TheCU->getFile()->getFilename();
CSInfo = TheCU->getFile()->getChecksum();
} else {
PresumedLoc PLoc = SM.getPresumedLoc(Loc);
PresumedLoc PLoc = SM.getPresumedLoc(SM.getFileLoc(Loc));
FileName = PLoc.getFilename();

if (FileName.empty()) {
Expand All @@ -572,7 +572,8 @@ llvm::DIFile *CGDebugInfo::getOrCreateFile(SourceLocation Loc) {
if (CSKind)
CSInfo.emplace(*CSKind, Checksum);
}
return createFile(FileName, CSInfo, getSource(SM, SM.getFileID(Loc)));
return createFile(FileName, CSInfo,
getSource(SM, SM.getFileID(SM.getFileLoc(Loc))));
}

llvm::DIFile *CGDebugInfo::createFile(
Expand Down Expand Up @@ -627,7 +628,7 @@ unsigned CGDebugInfo::getLineNumber(SourceLocation Loc) {
if (Loc.isInvalid())
return 0;
SourceManager &SM = CGM.getContext().getSourceManager();
return SM.getPresumedLoc(Loc).getLine();
return SM.getPresumedLoc(SM.getFileLoc(Loc)).getLine();
}

unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc, bool Force) {
Expand All @@ -639,7 +640,8 @@ unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc, bool Force) {
if (Loc.isInvalid() && CurLoc.isInvalid())
return 0;
SourceManager &SM = CGM.getContext().getSourceManager();
PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc);
PresumedLoc PLoc =
SM.getPresumedLoc(Loc.isValid() ? SM.getFileLoc(Loc) : CurLoc);
return PLoc.isValid() ? PLoc.getColumn() : 0;
}

Expand Down Expand Up @@ -4973,7 +4975,7 @@ void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc) {
// Update our current location
setLocation(Loc);

if (CurLoc.isInvalid() || CurLoc.isMacroID() || LexicalBlockStack.empty())
if (CurLoc.isInvalid() || LexicalBlockStack.empty())
return;

llvm::MDNode *Scope = LexicalBlockStack.back();
Expand Down Expand Up @@ -6244,7 +6246,8 @@ void CGDebugInfo::EmitGlobalAlias(const llvm::GlobalValue *GV,
void CGDebugInfo::AddStringLiteralDebugInfo(llvm::GlobalVariable *GV,
const StringLiteral *S) {
SourceLocation Loc = S->getStrTokenLoc(0);
PresumedLoc PLoc = CGM.getContext().getSourceManager().getPresumedLoc(Loc);
SourceManager &SM = CGM.getContext().getSourceManager();
PresumedLoc PLoc = SM.getPresumedLoc(SM.getFileLoc(Loc));
if (!PLoc.isValid())
return;

Expand Down
35 changes: 35 additions & 0 deletions clang/test/DebugInfo/Generic/macro-info.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// RUN: %clang_cc1 %s -debug-info-kind=standalone -emit-llvm -o - | FileCheck %s

#define GLOBAL(num) global## num
#define DECL_GLOBAL(x) int x
#define SAME_ORDER(x, y) x; y
#define SWAP_ORDER(x,y) y; x



SAME_ORDER(
int
// CHECK: DIGlobalVariable(name: "global",{{.*}} line: [[@LINE+1]]
GLOBAL // <- global
() = 42,
const char* s() {
// CHECK: DIGlobalVariable({{.*}}line: [[@LINE+1]],{{.*}} type: [[TYPEID:![0-9]+]]
return "1234567890";
}
)

SWAP_ORDER(
int GLOBAL( // <- global2
2) = 43,
// CHECK: DIGlobalVariable(name: "global3",{{.*}} line: [[@LINE+3]]
// CHECK: DIGlobalVariable(name: "global2",{{.*}} line: [[@LINE-3]]
DECL_GLOBAL(
GLOBAL( // <- global3
3)) = 44
);


DECL_GLOBAL(
// CHECK: DIGlobalVariable(name: "global4",{{.*}} line: [[@LINE+1]]
GLOBAL( // <- global4
4));