diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp index 39c5c0fa97462..d9587ec9bc0ff 100644 --- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp +++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCAsmInfo.cpp @@ -56,6 +56,7 @@ PPCELFMCAsmInfo::PPCELFMCAsmInfo(bool is64Bit, const Triple& T) { void PPCXCOFFMCAsmInfo::anchor() {} PPCXCOFFMCAsmInfo::PPCXCOFFMCAsmInfo(bool Is64Bit, const Triple &T) { - assert(!IsLittleEndian && "Little-endian XCOFF not supported."); + if (T.getArch() == Triple::ppc64le) + report_fatal_error("XCOFF is not supported for little-endian targets"); CodePointerSize = CalleeSaveStackSlotSize = Is64Bit ? 8 : 4; } diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp index 241a19d48027b..2915f333849a1 100644 --- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -151,7 +151,11 @@ class PPCAIXAsmPrinter : public PPCAsmPrinter { public: PPCAIXAsmPrinter(TargetMachine &TM, std::unique_ptr Streamer) - : PPCAsmPrinter(TM, std::move(Streamer)) {} + : PPCAsmPrinter(TM, std::move(Streamer)) { + if (MAI->isLittleEndian()) + report_fatal_error( + "cannot create AIX PPC Assembly Printer for a little-endian target"); + } StringRef getPassName() const override { return "AIX PPC Assembly Printer"; } diff --git a/llvm/test/CodeGen/PowerPC/aix-xcoff-endian-error.ll b/llvm/test/CodeGen/PowerPC/aix-xcoff-endian-error.ll new file mode 100644 index 0000000000000..4c5a73ed530db --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/aix-xcoff-endian-error.ll @@ -0,0 +1,13 @@ +; Check that use of the AIX/XCOFF related classes with ppc64le would +; cause llc to die with an appropriate message instead of proceeding +; with an invalid state. + +; RUN: not --crash llc < %s -mtriple powerpc64le--aix-xcoff 2>&1 \ +; RUN: | FileCheck --check-prefix=AIXXCOFF %s +; AIXXCOFF: ERROR: XCOFF is not supported for little-endian + +; RUN: not --crash llc < %s -mtriple powerpc64le--aix-macho 2>&1 \ +; RUN: | FileCheck --check-prefix=AIXMACHO %s +; AIXMACHO: ERROR: cannot create AIX PPC Assembly Printer for a little-endian target + +define i32 @a() { ret i32 0 }