OSDN Git Service

[DWARF] Warn on and ignore ".file 0" for DWARF v4 and earlier.
authorPaul Robinson <paul.robinson@sony.com>
Thu, 21 Jun 2018 16:42:03 +0000 (16:42 +0000)
committerPaul Robinson <paul.robinson@sony.com>
Thu, 21 Jun 2018 16:42:03 +0000 (16:42 +0000)
This had been messing with the directory table for prior versions, and
also could induce a crash when generating asm output.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@335254 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCParser/AsmParser.cpp
test/MC/ELF/dwarf-file0.s

index 00418ac..12c7dde 100644 (file)
@@ -3362,9 +3362,11 @@ bool AsmParser::parseDirectiveFile(SMLoc DirectiveLoc) {
       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)
index 38a8940..11648c8 100644 (file)
@@ -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]:
 # 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: ^