[clang] [CIR] Upstream minimal support for structure types (PR #135105)
Henrich Lauko via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 14 00:28:35 PDT 2025
================
@@ -67,6 +72,166 @@ void CIRDialect::printType(Type type, DialectAsmPrinter &os) const {
llvm::report_fatal_error("printer is missing a handler for this type");
}
+//===----------------------------------------------------------------------===//
+// RecordType Definitions
+//===----------------------------------------------------------------------===//
+
+Type RecordType::parse(mlir::AsmParser &parser) {
+ FailureOr<AsmParser::CyclicParseReset> cyclicParseGuard;
+ const auto loc = parser.getCurrentLocation();
+ const auto eLoc = parser.getEncodedSourceLoc(loc);
+ RecordKind kind;
+ auto *context = parser.getContext();
+
+ if (parser.parseLess())
+ return {};
+
+ // TODO(cir): in the future we should probably separate types for different
+ // source language declarations such as cir.record and cir.union
+ if (parser.parseOptionalKeyword("struct").succeeded())
+ kind = RecordKind::Struct;
+ else if (parser.parseOptionalKeyword("union").succeeded())
+ kind = RecordKind::Union;
+ else {
+ parser.emitError(loc, "unknown record type");
+ return {};
+ }
+
+ mlir::StringAttr name;
+ parser.parseOptionalAttribute(name);
+
+ // Is a self reference: ensure referenced type was parsed.
+ if (name && parser.parseOptionalGreater().succeeded()) {
+ auto type = getChecked(eLoc, context, name, kind);
----------------
xlauko wrote:
```suggestion
Type type = getChecked(eLoc, context, name, kind);
```
https://github.com/llvm/llvm-project/pull/135105
More information about the cfe-commits
mailing list