[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