[clang] [CIR][NFC] Fix regression in clang/test/CIR/IR/func.cir (PR #188069)

Sirui Mu via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 24 06:49:58 PDT 2026


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 <msrlancern at gmail.com>
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
+  }
+}



More information about the cfe-commits mailing list