From 8704b7897db5d877970bde2c8d6766488c457b90 Mon Sep 17 00:00:00 2001 From: Kevin Enderby Date: Wed, 11 Jan 2012 18:04:47 +0000 Subject: [PATCH] The error check for using -g with a .s file already containing dwarf .file directives was in the wrong place and getting triggered incorectly with a cpp .file directive. This change fixes that and adds a test case. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147951 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCParser/AsmParser.cpp | 8 ++++---- test/MC/AsmParser/directive_file-errors.s | 9 +++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 test/MC/AsmParser/directive_file-errors.s diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 7fad30164ee..16eb64b5f5b 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -2424,13 +2424,13 @@ bool GenericAsmParser::ParseDirectiveFile(StringRef, SMLoc DirectiveLoc) { if (getLexer().isNot(AsmToken::EndOfStatement)) return TokError("unexpected token in '.file' directive"); - if (getContext().getGenDwarfForAssembly() == true) - Error(DirectiveLoc, "input can't have .file dwarf directives when -g is " - "used to generate dwarf debug info for assembly code"); - if (FileNumber == -1) getStreamer().EmitFileDirective(Filename); else { + if (getContext().getGenDwarfForAssembly() == true) + Error(DirectiveLoc, "input can't have .file dwarf directives when -g is " + "used to generate dwarf debug info for assembly code"); + if (getStreamer().EmitDwarfFileDirective(FileNumber, Directory, Filename)) Error(FileNumberLoc, "file number already allocated"); } diff --git a/test/MC/AsmParser/directive_file-errors.s b/test/MC/AsmParser/directive_file-errors.s new file mode 100644 index 00000000000..5ae2bbe8005 --- /dev/null +++ b/test/MC/AsmParser/directive_file-errors.s @@ -0,0 +1,9 @@ +// RUN: not llvm-mc -g -triple i386-unknown-unknown %s 2> %t.err | FileCheck %s +// RUN: FileCheck --check-prefix=CHECK-ERRORS %s < %t.err +// Test for Bug 11740 + + .file "hello" + .file 1 "world" + +// CHECK: .file "hello" +// CHECK-ERRORS:6:9: error: input can't have .file dwarf directives when -g is used to generate dwarf debug info for assembly code