diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 68889cb2053..9becb403d57 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -1595,14 +1595,18 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info, // directive for the instruction. if (!HadError && getContext().getGenDwarfForAssembly() && getContext().getGenDwarfSectionSyms().count( - getStreamer().getCurrentSection().first)) { - - unsigned Line = SrcMgr.FindLineNumber(IDLoc, CurBuffer); + getStreamer().getCurrentSection().first)) { + unsigned Line; + if (ActiveMacros.empty()) + Line = SrcMgr.FindLineNumber(IDLoc, CurBuffer); + else + Line = SrcMgr.FindLineNumber(ActiveMacros.back()->InstantiationLoc, + ActiveMacros.back()->ExitBuffer); // If we previously parsed a cpp hash file line comment then make sure the // current Dwarf File is for the CppHashFilename if not then emit the // Dwarf File table for it and adjust the line number for the .loc. - if (CppHashFilename.size() != 0) { + if (CppHashFilename.size()) { unsigned FileNumber = getStreamer().EmitDwarfFileDirective( 0, StringRef(), CppHashFilename); getContext().setGenDwarfFileNumber(FileNumber); diff --git a/test/DebugInfo/X86/asm-macro-line-number.s b/test/DebugInfo/X86/asm-macro-line-number.s new file mode 100644 index 00000000000..0f51dbb6440 --- /dev/null +++ b/test/DebugInfo/X86/asm-macro-line-number.s @@ -0,0 +1,20 @@ +# RUN: llvm-mc -g -triple i686-linux-gnu -filetype asm -o - %s | FileCheck %s + +# 1 "reduced.S" +# 1 "" 1 +# 1 "reduced.S" 2 + + .macro return arg + movl %eax, \arg + retl + .endm + +function: + return 0 + +# CHECK: .file 2 "reduced.S" +# CHECK: .loc 2 8 0 +# CHECK: movl %eax, 0 +# CHECK: .loc 2 8 0 +# CHECK: retl +