From 74d799926e557928352dcd980788cae6487e421c Mon Sep 17 00:00:00 2001 From: Jez Ng Date: Tue, 8 Dec 2020 21:51:32 -0800 Subject: [PATCH] [lld-macho] Initialize AsmParsers earlier We need to initialize AsmParsers before any calls to `addFile`, as bitcode files may require them. Otherwise we trigger `Assertion T && T->hasMCAsmParser()' failed`. Reviewed By: #lld-macho, compnerd Differential Revision: https://reviews.llvm.org/D92913 --- lld/MachO/Driver.cpp | 3 ++- lld/test/MachO/module-asm.ll | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 lld/test/MachO/module-asm.ll diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp index 432bb81..b8a9262 100644 --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -749,6 +749,8 @@ bool macho::link(llvm::ArrayRef argsArr, bool canExitEarly, return !errorCount(); } + initLLVM(); // must be run before any call to addFile() + for (const auto &arg : args) { const auto &opt = arg->getOption(); warnIfDeprecatedOption(opt); @@ -807,7 +809,6 @@ bool macho::link(llvm::ArrayRef argsArr, bool canExitEarly, for (auto *arg : args.filtered(OPT_mllvm)) parseClangOption(arg->getValue(), arg->getSpelling()); - initLLVM(); compileBitcodeFiles(); replaceCommonSymbols(); diff --git a/lld/test/MachO/module-asm.ll b/lld/test/MachO/module-asm.ll new file mode 100644 index 0000000..01adcc4 --- /dev/null +++ b/lld/test/MachO/module-asm.ll @@ -0,0 +1,24 @@ +; REQUIRES: x86 +; RUN: llvm-as %s -o %t.o +; RUN: %lld %t.o -o %t +; RUN: llvm-objdump -d %t | FileCheck %s + +; CHECK: <_foo>: +; CHECK-NEXT: retq + +; CHECK: <_main>: +; CHECK-NEXT: jmp {{.*}} <_foo> + +target triple = "x86_64-apple-macosx10.15.0" +target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" + +module asm ".text" +module asm ".globl _foo" +module asm "_foo: ret" + +declare void @foo() + +define void @main() { + call void @foo() + ret void +} -- 2.7.4