[clang] 9c20e5e - [CIR] Fix cir.cast fold crash on a same type integral cast (#234236)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 23 23:58:28 PDT 2026
Author: Arseniy Obolenskiy
Date: 2026-10-24T08:58:24+02:00
New Revision: 9c20e5ef1410a701e93fcadfe0a305af3fdd63fe
URL: https://github.com/llvm/llvm-project/commit/9c20e5ef1410a701e93fcadfe0a305af3fdd63fe
DIFF: https://github.com/llvm/llvm-project/commit/9c20e5ef1410a701e93fcadfe0a305af3fdd63fe.diff
LOG: [CIR] Fix cir.cast fold crash on a same type integral cast (#234236)
The fold called fold() on the source defining op, which is null for
block arguments
Added:
Modified:
clang/lib/CIR/Dialect/IR/CIRDialect.cpp
clang/test/CIR/Transforms/canonicalize.cir
Removed:
################################################################################
diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp
index 838ea1e953e9b..84e7611335b53 100644
--- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp
+++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp
@@ -1295,13 +1295,7 @@ OpFoldResult cir::CastOp::fold(FoldAdaptor adaptor) {
if (getSrc().getType() == getType()) {
switch (getKind()) {
- case cir::CastKind::integral: {
- llvm::SmallVector<mlir::OpFoldResult, 1> foldResults;
- auto foldOrder = getSrc().getDefiningOp()->fold(foldResults);
- if (foldOrder.succeeded() && mlir::isa<mlir::Attribute>(foldResults[0]))
- return mlir::cast<mlir::Attribute>(foldResults[0]);
- return {};
- }
+ case cir::CastKind::integral:
case cir::CastKind::bitcast:
case cir::CastKind::address_space:
case cir::CastKind::float_complex:
diff --git a/clang/test/CIR/Transforms/canonicalize.cir b/clang/test/CIR/Transforms/canonicalize.cir
index c5b72f424aa64..a65df32833f19 100644
--- a/clang/test/CIR/Transforms/canonicalize.cir
+++ b/clang/test/CIR/Transforms/canonicalize.cir
@@ -216,6 +216,13 @@ module {
// CHECK-NEXT: %[[CAST3:.*]] = cir.cast integral %[[CAST2]] : !s32i -> !s64i
// CHECK-NEXT: cir.return %[[CAST3]] : !s64i
+ cir.func @cast_integral_same_type(%arg0: !s32i) -> !s32i {
+ %0 = cir.cast integral %arg0 : !s32i -> !s32i
+ cir.return %0 : !s32i
+ }
+ // CHECK: cir.func{{.*}} @cast_integral_same_type(%[[ARG0:.*]]: !s32i) -> !s32i
+ // CHECK-NEXT: cir.return %[[ARG0]] : !s32i
+
cir.func @cast_poison() -> !s64i {
%0 = cir.const #cir.poison : !s32i
%1 = cir.cast integral %0 : !s32i -> !s64i
More information about the cfe-commits
mailing list