diff options
| author | Paul Robinson <paul.robinson@sony.com> | 2018-06-21 16:42:03 +0000 |
|---|---|---|
| committer | Paul Robinson <paul.robinson@sony.com> | 2018-06-21 16:42:03 +0000 |
| commit | 547adcaaac64d2f4802e194c38309ad4e48a158f (patch) | |
| tree | 9d05b878281420db788f42e5ee670a7ff01025bd | |
| parent | ddfe69cc995d55ed45a46da18a81072c6effc9e1 (diff) | |
| download | bcm5719-llvm-547adcaaac64d2f4802e194c38309ad4e48a158f.tar.gz bcm5719-llvm-547adcaaac64d2f4802e194c38309ad4e48a158f.zip | |
[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.
llvm-svn: 335254
| -rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 6 | ||||
| -rw-r--r-- | llvm/test/MC/ELF/dwarf-file0.s | 18 |
2 files changed, 21 insertions, 3 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 00418ac70ba..12c7ddee706 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -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) diff --git a/llvm/test/MC/ELF/dwarf-file0.s b/llvm/test/MC/ELF/dwarf-file0.s index 38a89405e5a..11648c8d5a7 100644 --- a/llvm/test/MC/ELF/dwarf-file0.s +++ b/llvm/test/MC/ELF/dwarf-file0.s @@ -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: ^ |

