Index: lib/MC/MCParser/AsmParser.cpp =================================================================== --- lib/MC/MCParser/AsmParser.cpp +++ lib/MC/MCParser/AsmParser.cpp @@ -3001,12 +3001,11 @@ if (FileNumber == -1) getStreamer().EmitFileDirective(Filename); else { + // If there is -g option as well as debug info from directive file, + // we turn off -g option, directly use the existing debug info instead. if (getContext().getGenDwarfForAssembly()) - 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) == + getContext().setGenDwarfForAssembly(false); + else if (getStreamer().EmitDwarfFileDirective(FileNumber, Directory, Filename) == 0) Error(FileNumberLoc, "file number already allocated"); } Index: test/MC/AsmParser/directive_file-2.s =================================================================== --- test/MC/AsmParser/directive_file-2.s +++ test/MC/AsmParser/directive_file-2.s @@ -0,0 +1,9 @@ +# RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s +# RUN: llvm-mc -triple i386-unknown-unknown %s -filetype=null +// Test for Bug 11740 + + .file "hello" + .file 1 "world" + +// CHECK: .file "hello" +// CHECK: .file 1 "world" Index: test/MC/AsmParser/directive_file-errors.s =================================================================== --- test/MC/AsmParser/directive_file-errors.s +++ test/MC/AsmParser/directive_file-errors.s @@ -1,9 +0,0 @@ -// 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