[MC] Don't error on numberless .file directives on MachO

Summary:
Before r349976, MC ignored such directives when producing an object file
and asserted when re-producing textual assembly output. I turned this
assertion into a hard error in both cases in r349976, but this makes it
unnecessarily difficult to write a single assembly file that supports
both MachO and other object formats that support .file. A user reported
this as PR40578, and we decided to go back to ignoring the directive.

Fixes PR40578

Reviewers: mstorsjo

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D57772

llvm-svn: 353218
This commit is contained in:
Reid Kleckner 2019-02-05 21:14:09 +00:00
parent 0d0e9c08a4
commit f38bc4fc99
3 changed files with 8 additions and 12 deletions

View File

@ -3370,10 +3370,11 @@ bool AsmParser::parseDirectiveFile(SMLoc DirectiveLoc) {
}
if (FileNumber == -1) {
if (!getContext().getAsmInfo()->hasSingleParameterDotFile())
return Error(DirectiveLoc,
"target does not support '.file' without a number");
getStreamer().EmitFileDirective(Filename);
// Ignore the directive if there is no number and the target doesn't support
// numberless .file directives. This allows some portability of assembler
// between different object file formats.
if (getContext().getAsmInfo()->hasSingleParameterDotFile())
getStreamer().EmitFileDirective(Filename);
} else {
// In case there is a -g option as well as debug info from directive .file,
// we turn off the -g option, directly use the existing debug info instead.

View File

@ -1,8 +0,0 @@
// RUN: not llvm-mc -triple i386-apple-darwin9 %s -o /dev/null 2>&1 | FileCheck %s
// Previously this crashed MC.
// CHECK: error: target does not support '.file' without a number
.file "dir/foo"
nop

View File

@ -1,5 +1,8 @@
// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | llvm-readobj -s -section-data | FileCheck %s
// This number-less file directive is ignored on MachO.
.file "bar/baz.s"
.file 1 "dir/foo"
nop