[clang] 378e9bb - [cir-translate] Fix crash issue where the data layout string is missing (#147209)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 9 20:26:18 PDT 2025
Author: darkbuck
Date: 2025-07-09T23:26:15-04:00
New Revision: 378e9bb7e06c67d8235a8cb5bfb325b63d2ba319
URL: https://github.com/llvm/llvm-project/commit/378e9bb7e06c67d8235a8cb5bfb325b63d2ba319
DIFF: https://github.com/llvm/llvm-project/commit/378e9bb7e06c67d8235a8cb5bfb325b63d2ba319.diff
LOG: [cir-translate] Fix crash issue where the data layout string is missing (#147209)
- Targets like 'aarch64' or 'arm' only populate the data layout string
after the constructor. Need to call 'CreateTargetInfo' to setup them
properly.
Added:
Modified:
clang/test/CIR/Lowering/select.cir
clang/tools/cir-translate/cir-translate.cpp
Removed:
################################################################################
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..29a310a89de09 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,19 @@ 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;
+ llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diagnostics =
+ new clang::DiagnosticsEngine(diagID, diagOpts,
+ new clang::IgnoringDiagConsumer());
llvm::Triple triple(rawTriple);
+ // TODO: Need to set various target options later to populate
+ // 'TargetInfo' properly.
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();
More information about the cfe-commits
mailing list