https://github.com/NotLebedev updated https://github.com/llvm/llvm-project/pull/188742
>From 28693c901fa031f987088bf06d23d52f563ca6a0 Mon Sep 17 00:00:00 2001 From: NotLebedev <[email protected]> Date: Thu, 26 Mar 2026 16:20:32 +0300 Subject: [PATCH 1/2] [CIR] Fix incorrect ConstArrayAttr trailing_zeros parsing --- clang/lib/CIR/Dialect/IR/CIRAttrs.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp b/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp index d608038dafc5f..27cba6a20b445 100644 --- a/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp +++ b/clang/lib/CIR/Dialect/IR/CIRAttrs.cpp @@ -616,13 +616,12 @@ Attribute ConstArrayAttr::parse(AsmParser &parser, Type type) { unsigned zeros = 0; if (parser.parseOptionalComma().succeeded()) { if (parser.parseOptionalKeyword("trailing_zeros").succeeded()) { - unsigned typeSize = - mlir::cast<cir::ArrayType>(resultTy.value()).getSize(); + unsigned totalSize = mlir::cast<cir::ArrayType>(type).getSize(); mlir::Attribute elts = resultVal.value(); if (auto str = mlir::dyn_cast<mlir::StringAttr>(elts)) - zeros = typeSize - str.size(); + zeros = totalSize - str.size(); else - zeros = typeSize - mlir::cast<mlir::ArrayAttr>(elts).size(); + zeros = totalSize - mlir::cast<mlir::ArrayAttr>(elts).size(); } else { return {}; } @@ -632,9 +631,9 @@ Attribute ConstArrayAttr::parse(AsmParser &parser, Type type) { if (parser.parseGreater()) return {}; - return parser.getChecked<ConstArrayAttr>( - parser.getCurrentLocation(), parser.getContext(), resultTy.value(), - resultVal.value(), zeros); + return parser.getChecked<ConstArrayAttr>(parser.getCurrentLocation(), + parser.getContext(), type, + resultVal.value(), zeros); } void ConstArrayAttr::print(AsmPrinter &printer) const { >From e1a0d23b6415539d70f7292e9c149923a0e4ad86 Mon Sep 17 00:00:00 2001 From: NotLebedev <[email protected]> Date: Tue, 31 Mar 2026 12:55:14 +0300 Subject: [PATCH 2/2] fixup! [CIR] Fix incorrect ConstArrayAttr trailing_zeros parsing --- clang/test/CIR/IR/string-trailing-zeros.cir | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 clang/test/CIR/IR/string-trailing-zeros.cir diff --git a/clang/test/CIR/IR/string-trailing-zeros.cir b/clang/test/CIR/IR/string-trailing-zeros.cir new file mode 100644 index 0000000000000..d64bb19dca837 --- /dev/null +++ b/clang/test/CIR/IR/string-trailing-zeros.cir @@ -0,0 +1,20 @@ +// RUN: cir-opt %s --verify-roundtrip | FileCheck %s + +!s8i = !cir.int<s, 8> +module { + cir.global "private" constant cir_private @__const.test.b = #cir.const_array<"qwe" : !cir.array<!s8i x 3>, trailing_zeros> : !cir.array<!s8i x 100> + // CHECK: cir.global "private" constant cir_private @__const.test.b = #cir.const_array<"qwe" : !cir.array<!s8i x 3>, trailing_zeros> : !cir.array<!s8i x 100> + + cir.global "private" constant cir_private dso_local @".str" = #cir.const_array<"qwe" : !cir.array<!s8i x 3>, trailing_zeros> : !cir.array<!s8i x 4> {alignment = 1 : i64} + // CHECK: cir.global "private" constant cir_private dso_local @".str" = #cir.const_array<"qwe" : !cir.array<!s8i x 3>, trailing_zeros> : !cir.array<!s8i x 4> {alignment = 1 : i64} + + cir.func @test_string_trailing_zeros() { + %2 = cir.get_global @".str" : !cir.ptr<!cir.array<!s8i x 4>> + %3 = cir.get_global @__const.test.b : !cir.ptr<!cir.array<!s8i x 100>> + cir.return + } + // CHECK: cir.func @test_string_trailing_zeros() + // CHECK: %{{.*}} = cir.get_global @".str" : !cir.ptr<!cir.array<!s8i x 4>> + // CHECK: %{{.*}} = cir.get_global @__const.test.b : !cir.ptr<!cir.array<!s8i x 100>> + // CHECK: cir.return +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
