diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 3637d09e00fa1..d15a9a8a36c5a 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -162,8 +162,8 @@ class AsmParser : public MCAsmParser { }; CppHashInfoTy CppHashInfo; - /// Have we seen any file line comment. - bool HadCppHashFilename = false; + /// The filename from the first cpp hash file line comment, if any. + StringRef FirstCppHashFilename; /// List of forward directional labels for diagnosis at the end. SmallVector, 4> DirLabels; @@ -952,6 +952,12 @@ bool AsmParser::enabledGenDwarfForAssembly() { // the assembler source was produced with debug info already) then emit one // describing the assembler source file itself. if (getContext().getGenDwarfFileNumber() == 0) { + // Use the first #line directive for this, if any. It's preprocessed, so + // there is no checksum, and of course no source directive. + if (!FirstCppHashFilename.empty()) + getContext().setMCLineTableRootFile( + /*CUID=*/0, getContext().getCompilationDir(), FirstCppHashFilename, + /*Cksum=*/std::nullopt, /*Source=*/std::nullopt); const MCDwarfFile &RootFile = getContext().getMCDwarfLineTable(/*CUID=*/0).getRootFile(); getContext().setGenDwarfFileNumber(getStreamer().emitDwarfFileDirective( @@ -2434,19 +2440,8 @@ bool AsmParser::parseCppHashLineFilenameComment(SMLoc L, bool SaveLocInfo) { CppHashInfo.Filename = Filename; CppHashInfo.LineNumber = LineNumber; CppHashInfo.Buf = CurBuffer; - if (!HadCppHashFilename) { - HadCppHashFilename = true; - // If we haven't encountered any .file directives, then the first #line - // directive describes the "root" file and directory of the compilation - // unit. - if (getContext().getGenDwarfFileNumber() == 0) { - // It's preprocessed, so there is no checksum, and of course no source - // directive. - getContext().setMCLineTableRootFile( - /*CUID=*/0, getContext().getCompilationDir(), Filename, - /*Cksum=*/std::nullopt, /*Source=*/std::nullopt); - } - } + if (FirstCppHashFilename.empty()) + FirstCppHashFilename = Filename; return false; } diff --git a/llvm/test/MC/ELF/debug-hash-file-empty-dwarf.s b/llvm/test/MC/ELF/debug-hash-file-empty-dwarf.s deleted file mode 100644 index cc1c3d1796b6e..0000000000000 --- a/llvm/test/MC/ELF/debug-hash-file-empty-dwarf.s +++ /dev/null @@ -1,26 +0,0 @@ -// RUN: llvm-mc -triple x86_64-unknown-linux-gnu -filetype obj -g -dwarf-version 5 -o %t %s -// RUN: llvm-dwarfdump -debug-info -debug-line %t | FileCheck %s - -// CHECK-NOT: DW_TAG_ - -// CHECK: include_directories[ 0] = -// CHECK-NOT: include_directories[ 1] = -// CHECK: file_names[ 0]: -// CHECK-NEXT: name: "/MyTest/Inputs/other.S" -// CHECK-NEXT: dir_index: 0 -// CHECK-NOT: file_names[ 1]: - -// RUN: llvm-mc -triple=x86_64 -filetype=obj -g -dwarf-version=5 -fdebug-prefix-map=/MyTest=/src_root %s -o %t.5.o -// RUN: llvm-dwarfdump -debug-info -debug-line %t.5.o | FileCheck %s --check-prefixes=MAP - -// MAP-NOT: DW_TAG_ - -// MAP: include_directories[ 0] = "{{.*}}" -// MAP-NEXT: file_names[ 0]: -// MAP-NEXT: name: "/src_root/Inputs/other.S" -// MAP-NEXT: dir_index: 0 - -# 1 "/MyTest/Inputs/other.S" - -.section .data -.asciz "data"