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

Reply via email to