[llvm] r335254 - [DWARF] Warn on and ignore ".file 0" for DWARF v4 and earlier.
Paul Robinson via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 21 09:42:03 PDT 2018
Author: probinson
Date: Thu Jun 21 09:42:03 2018
New Revision: 335254
URL: http://llvm.org/viewvc/llvm-project?rev=335254&view=rev
Log:
[DWARF] Warn on and ignore ".file 0" for DWARF v4 and earlier.
This had been messing with the directory table for prior versions, and
also could induce a crash when generating asm output.
Modified:
llvm/trunk/lib/MC/MCParser/AsmParser.cpp
llvm/trunk/test/MC/ELF/dwarf-file0.s
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=335254&r1=335253&r2=335254&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Thu Jun 21 09:42:03 2018
@@ -3362,9 +3362,11 @@ bool AsmParser::parseDirectiveFile(SMLoc
memcpy(SourceBuf, SourceString.data(), SourceString.size());
Source = StringRef(SourceBuf, SourceString.size());
}
- if (FileNumber == 0)
+ if (FileNumber == 0) {
+ if (Ctx.getDwarfVersion() < 5)
+ return Warning(DirectiveLoc, "file 0 not supported prior to DWARF-5");
getStreamer().emitDwarfFile0Directive(Directory, Filename, CKMem, Source);
- else {
+ } else {
Expected<unsigned> FileNumOrErr = getStreamer().tryEmitDwarfFileDirective(
FileNumber, Directory, Filename, CKMem, Source);
if (!FileNumOrErr)
Modified: llvm/trunk/test/MC/ELF/dwarf-file0.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/dwarf-file0.s?rev=335254&r1=335253&r2=335254&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/dwarf-file0.s (original)
+++ llvm/trunk/test/MC/ELF/dwarf-file0.s Thu Jun 21 09:42:03 2018
@@ -1,5 +1,8 @@
# RUN: llvm-mc -dwarf-version 4 %s -filetype=obj -o - | llvm-dwarfdump -debug-line - | FileCheck %s --check-prefixes=CHECK,CHECK-4
+# RUN: llvm-mc -dwarf-version 4 %s -filetype=asm -o - | FileCheck %s --check-prefixes=ASM,ASM-4
+# RUN: llvm-mc -dwarf-version 4 %s -filetype=asm -o - 2>&1 | FileCheck %s --check-prefix=WARN
# RUN: llvm-mc -dwarf-version 5 %s -filetype=obj -o - | llvm-dwarfdump -debug-line - | FileCheck %s --check-prefixes=CHECK,CHECK-5
+# RUN: llvm-mc -dwarf-version 5 %s -filetype=asm -o - | FileCheck %s --check-prefixes=ASM,ASM-5
# REQUIRES: default_triple
# Darwin is stuck on DWARF v2.
# XFAIL: darwin
@@ -9,6 +12,7 @@
# CHECK-5: include_directories[ 0] = "/test"
# CHECK-4-NOT: include_directories[ 0]
# CHECK: include_directories[ 1] = "/include"
+# CHECK-4: include_directories[ 2] = "/test"
# CHECK-NOT: include_directories
# CHECK-4-NOT: file_names[ 0]
# CHECK-5: file_names[ 0]:
@@ -19,4 +23,16 @@
# CHECK-NEXT: dir_index: 1
# CHECK: file_names[ 2]:
# CHECK-NEXT: name: "root.cpp"
-# CHECK-NEXT: dir_index: 0
+# CHECK-4-NEXT: dir_index: 2
+# CHECK-5-NEXT: dir_index: 0
+
+# ASM-NOT: .file
+# ASM-5: .file 0 "/test" "root.cpp"
+# ASM: .file 1 "/include" "header.h"
+# ASM-4: .file 2 "/test" "root.cpp"
+# ASM-5: .file 2 "root.cpp"
+# ASM-NOT: .file
+
+# WARN: file 0 not supported prior to DWARF-5
+# WARN-NEXT: .file 0
+# WARN-NEXT: ^
More information about the llvm-commits
mailing list