OikawaKirie updated this revision to Diff 306590. OikawaKirie added a comment.
1. Replace fatal errors with assertions. >> In D91410#2400018 <https://reviews.llvm.org/D91410#2400018>, @tejohnson >> wrote: > > If these are not likely due to user input issues, then perhaps they should > all be assert so that they are compiled out in release compilers? 2. Fix clang-format errors in llvm/tools/llvm-objdump/MachODump.cpp CHANGES SINCE LAST ACTION https://reviews.llvm.org/D91410/new/ https://reviews.llvm.org/D91410 Files: clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp clang/tools/driver/cc1as_main.cpp llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp llvm/lib/CodeGen/LLVMTargetMachine.cpp llvm/lib/CodeGen/ParallelCG.cpp llvm/lib/LTO/LTOBackend.cpp llvm/lib/LTO/LTOCodeGenerator.cpp llvm/lib/LTO/LTOModule.cpp llvm/lib/LTO/ThinLTOCodeGenerator.cpp llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp llvm/tools/llvm-exegesis/lib/LlvmState.cpp llvm/tools/llvm-exegesis/llvm-exegesis.cpp llvm/tools/llvm-mc/llvm-mc.cpp llvm/tools/llvm-mca/llvm-mca.cpp llvm/tools/llvm-ml/llvm-ml.cpp llvm/tools/llvm-objdump/MachODump.cpp llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp mlir/lib/Conversion/GPUCommon/ConvertKernelFuncToBlob.cpp mlir/lib/ExecutionEngine/ExecutionEngine.cpp
Index: mlir/lib/ExecutionEngine/ExecutionEngine.cpp =================================================================== --- mlir/lib/ExecutionEngine/ExecutionEngine.cpp +++ mlir/lib/ExecutionEngine/ExecutionEngine.cpp @@ -130,6 +130,10 @@ std::unique_ptr<llvm::TargetMachine> machine(target->createTargetMachine( targetTriple, cpu, features.getString(), {}, {})); + if (!machine) { + errs() << "Unable to create target machine\n"; + return true; + } llvmModule->setDataLayout(machine->createDataLayout()); llvmModule->setTargetTriple(targetTriple); return false; Index: mlir/lib/Conversion/GPUCommon/ConvertKernelFuncToBlob.cpp =================================================================== --- mlir/lib/Conversion/GPUCommon/ConvertKernelFuncToBlob.cpp +++ mlir/lib/Conversion/GPUCommon/ConvertKernelFuncToBlob.cpp @@ -130,6 +130,10 @@ } targetMachine.reset(target->createTargetMachine(triple.str(), targetChip, features, {}, {})); + if (targetMachine == nullptr) { + emitError(loc, "connot initialize target machine"); + return {}; + } } llvmModule.setDataLayout(targetMachine->createDataLayout()); Index: llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp =================================================================== --- llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp +++ llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp @@ -764,6 +764,8 @@ ErrorAndExit("Unable to create disassembler!"); std::unique_ptr<MCInstrInfo> MII(TheTarget->createMCInstrInfo()); + if (!MII) + ErrorAndExit("Unable to create target instruction info!"); std::unique_ptr<MCInstPrinter> InstPrinter( TheTarget->createMCInstPrinter(Triple(TripleName), 0, *MAI, *MII, *MRI)); Index: llvm/tools/llvm-objdump/MachODump.cpp =================================================================== --- llvm/tools/llvm-objdump/MachODump.cpp +++ llvm/tools/llvm-objdump/MachODump.cpp @@ -7200,10 +7200,32 @@ else MachOMCPU = MCPU; +#define CHECK_TARGET_INFO_CREATION(NAME) \ + do { \ + if (!NAME) { \ + WithColor::error(errs(), "llvm-objdump") \ + << "couldn't initialize disassembler for target " << TripleName \ + << '\n'; \ + return; \ + } \ + } while (false) +#define CHECK_THUMB_TARGET_INFO_CREATION(NAME) \ + do { \ + if (!NAME) { \ + WithColor::error(errs(), "llvm-objdump") \ + << "couldn't initialize disassembler for target " << ThumbTripleName \ + << '\n'; \ + return; \ + } \ + } while (false) + std::unique_ptr<const MCInstrInfo> InstrInfo(TheTarget->createMCInstrInfo()); + CHECK_TARGET_INFO_CREATION(InstrInfo); std::unique_ptr<const MCInstrInfo> ThumbInstrInfo; - if (ThumbTarget) + if (ThumbTarget) { ThumbInstrInfo.reset(ThumbTarget->createMCInstrInfo()); + CHECK_THUMB_TARGET_INFO_CREATION(ThumbInstrInfo); + } // Package up features to be passed to target/subtarget std::string FeaturesStr; @@ -7218,13 +7240,17 @@ // Set up disassembler. std::unique_ptr<const MCRegisterInfo> MRI( TheTarget->createMCRegInfo(TripleName)); + CHECK_TARGET_INFO_CREATION(MRI); std::unique_ptr<const MCAsmInfo> AsmInfo( TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions)); + CHECK_TARGET_INFO_CREATION(AsmInfo); std::unique_ptr<const MCSubtargetInfo> STI( TheTarget->createMCSubtargetInfo(TripleName, MachOMCPU, FeaturesStr)); + CHECK_TARGET_INFO_CREATION(STI); MCContext Ctx(AsmInfo.get(), MRI.get(), nullptr); std::unique_ptr<MCDisassembler> DisAsm( TheTarget->createMCDisassembler(*STI, Ctx)); + CHECK_TARGET_INFO_CREATION(DisAsm); std::unique_ptr<MCSymbolizer> Symbolizer; struct DisassembleInfo SymbolizerInfo(nullptr, nullptr, nullptr, false); std::unique_ptr<MCRelocationInfo> RelInfo( @@ -7238,6 +7264,7 @@ int AsmPrinterVariant = AsmInfo->getAssemblerDialect(); std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter( Triple(TripleName), AsmPrinterVariant, *AsmInfo, *InstrInfo, *MRI)); + CHECK_TARGET_INFO_CREATION(IP); // Set the display preference for hex vs. decimal immediates. IP->setPrintImmHex(PrintImmHex); // Comment stream and backing vector. @@ -7250,12 +7277,6 @@ // comment causing different diffs with the 'C' disassembler library API. // IP->setCommentStream(CommentStream); - if (!AsmInfo || !STI || !DisAsm || !IP) { - WithColor::error(errs(), "llvm-objdump") - << "couldn't initialize disassembler for target " << TripleName << '\n'; - return; - } - // Set up separate thumb disassembler if needed. std::unique_ptr<const MCRegisterInfo> ThumbMRI; std::unique_ptr<const MCAsmInfo> ThumbAsmInfo; @@ -7268,13 +7289,17 @@ std::unique_ptr<MCRelocationInfo> ThumbRelInfo; if (ThumbTarget) { ThumbMRI.reset(ThumbTarget->createMCRegInfo(ThumbTripleName)); + CHECK_THUMB_TARGET_INFO_CREATION(ThumbMRI); ThumbAsmInfo.reset( ThumbTarget->createMCAsmInfo(*ThumbMRI, ThumbTripleName, MCOptions)); + CHECK_THUMB_TARGET_INFO_CREATION(ThumbAsmInfo); ThumbSTI.reset( ThumbTarget->createMCSubtargetInfo(ThumbTripleName, MachOMCPU, FeaturesStr)); + CHECK_THUMB_TARGET_INFO_CREATION(ThumbSTI); ThumbCtx.reset(new MCContext(ThumbAsmInfo.get(), ThumbMRI.get(), nullptr)); ThumbDisAsm.reset(ThumbTarget->createMCDisassembler(*ThumbSTI, *ThumbCtx)); + CHECK_THUMB_TARGET_INFO_CREATION(ThumbDisAsm); MCContext *PtrThumbCtx = ThumbCtx.get(); ThumbRelInfo.reset( ThumbTarget->createMCRelocationInfo(ThumbTripleName, *PtrThumbCtx)); @@ -7288,16 +7313,13 @@ ThumbIP.reset(ThumbTarget->createMCInstPrinter( Triple(ThumbTripleName), ThumbAsmPrinterVariant, *ThumbAsmInfo, *ThumbInstrInfo, *ThumbMRI)); + CHECK_THUMB_TARGET_INFO_CREATION(ThumbIP); // Set the display preference for hex vs. decimal immediates. ThumbIP->setPrintImmHex(PrintImmHex); } - if (ThumbTarget && (!ThumbAsmInfo || !ThumbSTI || !ThumbDisAsm || !ThumbIP)) { - WithColor::error(errs(), "llvm-objdump") - << "couldn't initialize disassembler for target " << ThumbTripleName - << '\n'; - return; - } +#undef CHECK_TARGET_INFO_CREATION +#undef CHECK_THUMB_TARGET_INFO_CREATION MachO::mach_header Header = MachOOF->getHeader(); Index: llvm/tools/llvm-ml/llvm-ml.cpp =================================================================== --- llvm/tools/llvm-ml/llvm-ml.cpp +++ llvm/tools/llvm-ml/llvm-ml.cpp @@ -315,8 +315,11 @@ std::unique_ptr<MCStreamer> Str; std::unique_ptr<MCInstrInfo> MCII(TheTarget->createMCInstrInfo()); + assert(MCII && "Unable to create instruction info!"); + std::unique_ptr<MCSubtargetInfo> STI(TheTarget->createMCSubtargetInfo( TripleName, /*CPU=*/"", /*Features=*/"")); + assert(STI && "Unable to create subtarget info!"); MCInstPrinter *IP = nullptr; if (FileType == OFT_AssemblyFile) { Index: llvm/tools/llvm-mca/llvm-mca.cpp =================================================================== --- llvm/tools/llvm-mca/llvm-mca.cpp +++ llvm/tools/llvm-mca/llvm-mca.cpp @@ -330,6 +330,7 @@ std::unique_ptr<MCSubtargetInfo> STI( TheTarget->createMCSubtargetInfo(TripleName, MCPU, MATTR)); + assert(STI && "Unable to create subtarget info!"); if (!STI->isCPUStringValid(MCPU)) return 1; @@ -373,6 +374,7 @@ std::unique_ptr<buffer_ostream> BOS; std::unique_ptr<MCInstrInfo> MCII(TheTarget->createMCInstrInfo()); + assert(MCII && "Unable to create instruction info!"); std::unique_ptr<MCInstrAnalysis> MCIA( TheTarget->createMCInstrAnalysis(MCII.get())); @@ -443,9 +445,11 @@ std::unique_ptr<MCCodeEmitter> MCE( TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx)); + assert(MCE && "Unable to create code emitter!"); std::unique_ptr<MCAsmBackend> MAB(TheTarget->createMCAsmBackend( *STI, *MRI, mc::InitMCTargetOptionsFromFlags())); + assert(MAB && "Unable to create asm backend!"); for (const std::unique_ptr<mca::CodeRegion> &Region : Regions) { // Skip empty code regions. Index: llvm/tools/llvm-mc/llvm-mc.cpp =================================================================== --- llvm/tools/llvm-mc/llvm-mc.cpp +++ llvm/tools/llvm-mc/llvm-mc.cpp @@ -469,8 +469,11 @@ std::unique_ptr<MCStreamer> Str; std::unique_ptr<MCInstrInfo> MCII(TheTarget->createMCInstrInfo()); + assert(MCII && "Unable to create instruction info!"); + std::unique_ptr<MCSubtargetInfo> STI( TheTarget->createMCSubtargetInfo(TripleName, MCPU, FeaturesStr)); + assert(STI && "Unable to create subtarget info!"); MCInstPrinter *IP = nullptr; if (FileType == OFT_AssemblyFile) { Index: llvm/tools/llvm-exegesis/llvm-exegesis.cpp =================================================================== --- llvm/tools/llvm-exegesis/llvm-exegesis.cpp +++ llvm/tools/llvm-exegesis/llvm-exegesis.cpp @@ -427,6 +427,7 @@ } std::unique_ptr<MCInstrInfo> InstrInfo(TheTarget->createMCInstrInfo()); + assert(InstrInfo && "Unable to create instruction info!"); const auto Clustering = ExitOnErr(InstructionBenchmarkClustering::create( Points, AnalysisClusteringAlgorithm, AnalysisDbscanNumPoints, Index: llvm/tools/llvm-exegesis/lib/LlvmState.cpp =================================================================== --- llvm/tools/llvm-exegesis/lib/LlvmState.cpp +++ llvm/tools/llvm-exegesis/lib/LlvmState.cpp @@ -31,6 +31,7 @@ TheTargetMachine.reset( static_cast<LLVMTargetMachine *>(TheTarget->createTargetMachine( Triple, CpuName, Features, Options, Reloc::Model::Static))); + assert(TheTargetMachine && "unable to create target machine"); TheExegesisTarget = ExegesisTarget::lookup(TheTargetMachine->getTargetTriple()); if (!TheExegesisTarget) { errs() << "no exegesis target for " << Triple << ", using default\n"; @@ -67,6 +68,7 @@ TheTargetMachine->getTarget().createMCCodeEmitter( *TheTargetMachine->getMCInstrInfo(), *TheTargetMachine->getMCRegisterInfo(), Context)); + assert(CodeEmitter && "unable to create code emitter"); SmallVector<char, 16> Tmp; raw_svector_ostream OS(Tmp); SmallVector<MCFixup, 4> Fixups; Index: llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp =================================================================== --- llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp +++ llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp @@ -320,6 +320,7 @@ assert(TT.isOSBinFormatELF()); std::unique_ptr<MCSubtargetInfo> STI( TM.getTarget().createMCSubtargetInfo(TT.str(), "", "")); + assert(STI && "Unable to create subtarget info"); MCSymbol *HwasanTagMismatchV1Sym = OutContext.getOrCreateSymbol("__hwasan_tag_mismatch"); Index: llvm/lib/LTO/ThinLTOCodeGenerator.cpp =================================================================== --- llvm/lib/LTO/ThinLTOCodeGenerator.cpp +++ llvm/lib/LTO/ThinLTOCodeGenerator.cpp @@ -575,9 +575,12 @@ Features.getDefaultSubtargetFeatures(TheTriple); std::string FeatureStr = Features.getString(); - return std::unique_ptr<TargetMachine>( + std::unique_ptr<TargetMachine> TM( TheTarget->createTargetMachine(TheTriple.str(), MCpu, FeatureStr, Options, RelocModel, None, CGOptLevel)); + assert(TM && "Cannot create target machine"); + + return TM; } /** Index: llvm/lib/LTO/LTOModule.cpp =================================================================== --- llvm/lib/LTO/LTOModule.cpp +++ llvm/lib/LTO/LTOModule.cpp @@ -46,6 +46,7 @@ LTOModule::LTOModule(std::unique_ptr<Module> M, MemoryBufferRef MBRef, llvm::TargetMachine *TM) : Mod(std::move(M)), MBRef(MBRef), _target(TM) { + assert(_target && "target machine is null"); SymTab.addModule(Mod.get()); } Index: llvm/lib/LTO/LTOCodeGenerator.cpp =================================================================== --- llvm/lib/LTO/LTOCodeGenerator.cpp +++ llvm/lib/LTO/LTOCodeGenerator.cpp @@ -374,10 +374,13 @@ } TargetMach = createTargetMachine(); + assert(TargetMach && "Unable to create target machine"); + return true; } std::unique_ptr<TargetMachine> LTOCodeGenerator::createTargetMachine() { + assert(MArch && "MArch is not set!"); return std::unique_ptr<TargetMachine>(MArch->createTargetMachine( TripleStr, MCpu, FeatureStr, Options, RelocModel, None, CGOptLevel)); } Index: llvm/lib/LTO/LTOBackend.cpp =================================================================== --- llvm/lib/LTO/LTOBackend.cpp +++ llvm/lib/LTO/LTOBackend.cpp @@ -199,9 +199,11 @@ else CodeModel = M.getCodeModel(); - return std::unique_ptr<TargetMachine>(TheTarget->createTargetMachine( + std::unique_ptr<TargetMachine> TM(TheTarget->createTargetMachine( TheTriple, Conf.CPU, Features.getString(), Conf.Options, RelocModel, CodeModel, Conf.CGOptLevel)); + assert(TM && "Failed to create target machine"); + return TM; } static void runNewPMPasses(const Config &Conf, Module &Mod, TargetMachine *TM, Index: llvm/lib/CodeGen/ParallelCG.cpp =================================================================== --- llvm/lib/CodeGen/ParallelCG.cpp +++ llvm/lib/CodeGen/ParallelCG.cpp @@ -28,6 +28,8 @@ function_ref<std::unique_ptr<TargetMachine>()> TMFactory, CodeGenFileType FileType) { std::unique_ptr<TargetMachine> TM = TMFactory(); + assert(TM && "Failed to create target machine!"); + legacy::PassManager CodeGenPasses; if (TM->addPassesToEmitFile(CodeGenPasses, OS, nullptr, FileType)) report_fatal_error("Failed to setup codegen"); Index: llvm/lib/CodeGen/LLVMTargetMachine.cpp =================================================================== --- llvm/lib/CodeGen/LLVMTargetMachine.cpp +++ llvm/lib/CodeGen/LLVMTargetMachine.cpp @@ -40,13 +40,16 @@ void LLVMTargetMachine::initAsmInfo() { MRI.reset(TheTarget.createMCRegInfo(getTargetTriple().str())); + assert(MRI && "Unable to create reg info"); MII.reset(TheTarget.createMCInstrInfo()); + assert(MII && "Unable to create instruction info"); // FIXME: Having an MCSubtargetInfo on the target machine is a hack due // to some backends having subtarget feature dependent module level // code generation. This is similar to the hack in the AsmPrinter for // module level assembly etc. STI.reset(TheTarget.createMCSubtargetInfo( getTargetTriple().str(), getTargetCPU(), getTargetFeatureString())); + assert(STI && "Unable to create subtarget info"); MCAsmInfo *TmpAsmInfo = TheTarget.createMCAsmInfo( *MRI, getTargetTriple().str(), Options.MCOptions); Index: llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp =================================================================== --- llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp +++ llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp @@ -147,6 +147,7 @@ // we only need MCInstrInfo for asm parsing. We create one unconditionally // because it's not subtarget dependent. std::unique_ptr<MCInstrInfo> MII(TM.getTarget().createMCInstrInfo()); + assert(MII && "Failed to create instruction info"); std::unique_ptr<MCTargetAsmParser> TAP(TM.getTarget().createMCAsmParser( STI, *Parser, *MII, MCOptions)); if (!TAP) Index: llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp =================================================================== --- llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -307,6 +307,7 @@ std::unique_ptr<MCSubtargetInfo> STI(TM.getTarget().createMCSubtargetInfo( TM.getTargetTriple().str(), TM.getTargetCPU(), TM.getTargetFeatureString())); + assert(STI && "Unable to create subtarget info"); OutStreamer->AddComment("Start of file scope inline assembly"); OutStreamer->AddBlankLine(); emitInlineAsm(M.getModuleInlineAsm() + "\n", Index: clang/tools/driver/cc1as_main.cpp =================================================================== --- clang/tools/driver/cc1as_main.cpp +++ clang/tools/driver/cc1as_main.cpp @@ -428,8 +428,11 @@ std::unique_ptr<MCStreamer> Str; std::unique_ptr<MCInstrInfo> MCII(TheTarget->createMCInstrInfo()); + assert(MCII && "Unable to create instruction info!"); + std::unique_ptr<MCSubtargetInfo> STI( TheTarget->createMCSubtargetInfo(Opts.Triple, Opts.CPU, FS)); + assert(STI && "Unable to create subtarget info!"); raw_pwrite_stream *Out = FDOS.get(); std::unique_ptr<buffer_ostream> BOS; @@ -468,6 +471,8 @@ TheTarget->createMCCodeEmitter(*MCII, *MRI, Ctx)); std::unique_ptr<MCAsmBackend> MAB( TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions)); + assert(MAB && "Unable to create asm backend!"); + std::unique_ptr<MCObjectWriter> OW = DwoOS ? MAB->createDwoObjectWriter(*Out, *DwoOS) : MAB->createObjectWriter(*Out); Index: clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp =================================================================== --- clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp +++ clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp @@ -107,11 +107,16 @@ std::string E; const Target *TheTarget = TargetRegistry::lookupTarget(codegen::getMArch(), ModuleTriple, E); - TargetMachine *Machine = TheTarget->createTargetMachine( + if (!TheTarget) + ErrorAndExit(E); + + std::unique_ptr<TargetMachine> TM(TheTarget->createTargetMachine( M->getTargetTriple(), codegen::getCPUStr(), codegen::getFeaturesStr(), Options, codegen::getExplicitRelocModel(), - codegen::getExplicitCodeModel(), OLvl); - std::unique_ptr<TargetMachine> TM(Machine); + codegen::getExplicitCodeModel(), OLvl)); + if (!TM) + ErrorAndExit("Could not create target machine"); + codegen::setFunctionAttributes(codegen::getCPUStr(), codegen::getFeaturesStr(), *M);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits