forked from OSchip/llvm-project
[AIX] Avoid structor alias; die before bad alias codegen
Summary: `AsmPrinter::emitGlobalIndirectSymbol` is dependent on `MCStreamer::emitAssignment` to produce `.set` directives for alias symbols; however, the `.set` pseudo-op on AIX is documented as not usable with external relocatable terms or expressions, which limits its applicability in generating alias symbols. Disable generating aliases on AIX until a different implementation strategy is available. Reviewers: cebowleratibm, jasonliu, sfertile, daltenty, DiggerLin Reviewed By: jasonliu Differential Revision: https://reviews.llvm.org/D79044
This commit is contained in:
parent
f66309deab
commit
b116ded57d
|
@ -4675,8 +4675,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
|
||||
// Enable -mconstructor-aliases except on darwin, where we have to work around
|
||||
// a linker bug (see <rdar://problem/7651567>), and CUDA device code, where
|
||||
// aliases aren't supported.
|
||||
if (!RawTriple.isOSDarwin() && !RawTriple.isNVPTX())
|
||||
// aliases aren't supported. Similarly, aliases aren't yet supported for AIX.
|
||||
if (!RawTriple.isOSDarwin() && !RawTriple.isNVPTX() && !RawTriple.isOSAIX())
|
||||
CmdArgs.push_back("-mconstructor-aliases");
|
||||
|
||||
// Darwin's kernel doesn't support guard variables; just die if we
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
// Check that we don't pass -mconstructor-aliases when compiling for AIX.
|
||||
|
||||
// RUN: %clang -### -target powerpc-ibm-aix7.1.0.0 %s -c -o %t.o 2>&1 \
|
||||
// RUN: | FileCheck %s
|
||||
// RUN: %clang -### -target powerpc64-ibm-aix7.1.0.0 %s -c -o %t.o 2>&1 \
|
||||
// RUN: | FileCheck %s
|
||||
// CHECK-NOT: "-mconstructor-aliases"
|
|
@ -155,6 +155,14 @@ public:
|
|||
|
||||
StringRef getPassName() const override { return "AIX PPC Assembly Printer"; }
|
||||
|
||||
bool doInitialization(Module &M) override {
|
||||
if (M.alias_size() > 0u)
|
||||
report_fatal_error(
|
||||
"module has aliases, which LLVM does not yet support for AIX");
|
||||
|
||||
return PPCAsmPrinter::doInitialization(M);
|
||||
}
|
||||
|
||||
void SetupMachineFunction(MachineFunction &MF) override;
|
||||
|
||||
void emitGlobalVariable(const GlobalVariable *GV) override;
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
; RUN: not --crash llc < %s -mtriple powerpc-ibm-aix-xcoff 2>&1 | FileCheck %s
|
||||
; RUN: not --crash llc < %s -mtriple powerpc64-ibm-aix-xcoff 2>&1 | FileCheck %s
|
||||
|
||||
; Check that, while generation of aliases on AIX remains unimplemented, llc dies
|
||||
; with an appropriate message instead of generating incorrect output when an
|
||||
; alias is encountered.
|
||||
|
||||
define i32 @a() { ret i32 0 }
|
||||
; CHECK: ERROR: module has aliases
|
||||
@b = internal alias i32 (), i32 ()* @a
|
Loading…
Reference in New Issue