https://github.com/Lancern updated 
https://github.com/llvm/llvm-project/pull/188069

>From cb35201d1a4a45d4094ac40d4faf5d795731e84a Mon Sep 17 00:00:00 2001
From: Sirui Mu <[email protected]>
Date: Tue, 24 Mar 2026 00:39:39 +0800
Subject: [PATCH] [CIR][NFC] Fix regression in clang/test/CIR/IR/func.cir

This patch fixes a regression in `clang/test/CIR/IR/func.cir` where the parsing
of `special_member` attributes fails.
---
 clang/lib/CIR/Dialect/IR/CIRDialect.cpp | 19 ++++++++++---------
 clang/test/CIR/IR/invalid-func.cir      | 10 +++++++++-
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp 
b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp
index bf369bfe69991..eb322d135a804 100644
--- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp
+++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp
@@ -2215,17 +2215,18 @@ ParseResult cir::FuncOp::parse(OpAsmParser &parser, 
OperationState &state) {
 
   // Parse CXXSpecialMember attribute
   if (parser.parseOptionalKeyword("special_member").succeeded()) {
-    cir::CXXCtorAttr ctorAttr;
-    cir::CXXDtorAttr dtorAttr;
-    cir::CXXAssignAttr assignAttr;
     if (parser.parseLess().failed())
       return failure();
-    if (parser.parseOptionalAttribute(ctorAttr).has_value())
-      state.addAttribute(specialMemberAttr, ctorAttr);
-    else if (parser.parseOptionalAttribute(dtorAttr).has_value())
-      state.addAttribute(specialMemberAttr, dtorAttr);
-    else if (parser.parseOptionalAttribute(assignAttr).has_value())
-      state.addAttribute(specialMemberAttr, assignAttr);
+
+    mlir::Attribute attr;
+    if (parser.parseAttribute(attr).failed())
+      return failure();
+    if (!mlir::isa<cir::CXXCtorAttr, cir::CXXDtorAttr, cir::CXXAssignAttr>(
+            attr))
+      return parser.emitError(parser.getCurrentLocation(),
+                              "expected a C++ special member attribute");
+    state.addAttribute(specialMemberAttr, attr);
+
     if (parser.parseGreater().failed())
       return failure();
   }
diff --git a/clang/test/CIR/IR/invalid-func.cir 
b/clang/test/CIR/IR/invalid-func.cir
index 6c06079ed8fd8..5fc1c2a53db09 100644
--- a/clang/test/CIR/IR/invalid-func.cir
+++ b/clang/test/CIR/IR/invalid-func.cir
@@ -1,4 +1,4 @@
-// RUN: cir-opt %s -verify-diagnostics
+// RUN: cir-opt %s -verify-diagnostics -split-input-file
 
 module {
   cir.func @l0() {
@@ -9,3 +9,11 @@ module {
     cir.return
   }
 }
+
+// -----
+
+module {
+  cir.func @l0() special_member<> { // expected-error {{expected attribute 
value}}
+    cir.return
+  }
+}

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to