From 547adcaaac64d2f4802e194c38309ad4e48a158f Mon Sep 17 00:00:00 2001 From: Paul Robinson Date: Thu, 21 Jun 2018 16:42:03 +0000 Subject: [PATCH] [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 --- llvm/lib/MC/MCParser/AsmParser.cpp | 6 ++++-- 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 00418ac..12c7dde 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 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 38a8940..11648c8 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: ^ -- 2.7.4