https://github.com/darkbuck created https://github.com/llvm/llvm-project/pull/147209
- Targets like 'aarch64' or 'arm' only populate the data layout string after the constructor. Need to call 'CreateTargetInfo' to setup them properly. >From d436eb224999ee8eb6282ed000793db4e61b7017 Mon Sep 17 00:00:00 2001 From: Michael Liao <michael.hl...@gmail.com> Date: Sat, 5 Jul 2025 14:32:55 -0400 Subject: [PATCH] [cir-translate] Fix crash issue where the data layout string is missing - Targets like 'aarch64' or 'arm' only populate the data layout string after the constructor. Need to call 'CreateTargetInfo' to setup them properly. --- clang/test/CIR/Lowering/select.cir | 4 ++-- clang/tools/cir-translate/cir-translate.cpp | 12 ++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/clang/test/CIR/Lowering/select.cir b/clang/test/CIR/Lowering/select.cir index 71ca79a390e8b..37f9789e6b0f6 100644 --- a/clang/test/CIR/Lowering/select.cir +++ b/clang/test/CIR/Lowering/select.cir @@ -1,5 +1,5 @@ -// RUN: cir-translate -cir-to-llvmir --disable-cc-lowering -o %t.ll %s -// RUN: FileCheck --input-file=%t.ll -check-prefix=LLVM %s +// RUN: cir-translate -cir-to-llvmir --disable-cc-lowering -o - %s | FileCheck -check-prefix=LLVM %s +// RUN: cir-translate -target aarch64 -cir-to-llvmir --disable-cc-lowering -o - %s | FileCheck -check-prefix=LLVM %s !s32i = !cir.int<s, 32> diff --git a/clang/tools/cir-translate/cir-translate.cpp b/clang/tools/cir-translate/cir-translate.cpp index e0e9414602a16..06bb31f677880 100644 --- a/clang/tools/cir-translate/cir-translate.cpp +++ b/clang/tools/cir-translate/cir-translate.cpp @@ -25,6 +25,9 @@ #include "llvm/IR/Module.h" #include "llvm/TargetParser/Host.h" +#include "clang/Basic/Diagnostic.h" +#include "clang/Basic/DiagnosticIDs.h" +#include "clang/Basic/DiagnosticOptions.h" #include "clang/Basic/TargetInfo.h" #include "clang/CIR/Dialect/IR/CIRDialect.h" #include "clang/CIR/Dialect/Passes.h" @@ -82,12 +85,17 @@ llvm::LogicalResult prepareCIRModuleDataLayout(mlir::ModuleOp mod, // Data layout is fully determined by the target triple. Here we only pass the // triple to get the data layout. + llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> diagID( + new clang::DiagnosticIDs); + clang::DiagnosticOptions diagOpts; + clang::DiagnosticsEngine diagnostics(diagID, diagOpts, + new clang::IgnoringDiagConsumer()); llvm::Triple triple(rawTriple); clang::TargetOptions targetOptions; targetOptions.Triple = rawTriple; // FIXME: AllocateTarget is a big deal. Better make it a global state. - std::unique_ptr<clang::TargetInfo> targetInfo = - clang::targets::AllocateTarget(llvm::Triple(rawTriple), targetOptions); + llvm::IntrusiveRefCntPtr<clang::TargetInfo> targetInfo = + clang::TargetInfo::CreateTargetInfo(diagnostics, targetOptions); if (!targetInfo) { mod.emitError() << "error: invalid target triple '" << rawTriple << "'\n"; return llvm::failure(); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits