diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp index 43382660691a..e0bffe48d818 100644 --- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp +++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp @@ -1926,6 +1926,7 @@ ParseResult cir::FuncOp::parse(OpAsmParser &parser, OperationState &state) { auto lambdaNameAttr = getLambdaAttrName(state.name); auto visNameAttr = getSymVisibilityAttrName(state.name); auto noProtoNameAttr = getNoProtoAttrName(state.name); + auto dsolocalNameAttr = getDsolocalAttrName(state.name); if (::mlir::succeeded(parser.parseOptionalKeyword(builtinNameAttr.strref()))) state.addAttribute(builtinNameAttr, parser.getBuilder().getUnitAttr()); if (::mlir::succeeded( @@ -1949,6 +1950,8 @@ ParseResult cir::FuncOp::parse(OpAsmParser &parser, OperationState &state) { state.addAttribute(visNameAttr, parser.getBuilder().getStringAttr(visAttrStr)); } + if (parser.parseOptionalKeyword(dsolocalNameAttr).succeeded()) + state.addAttribute(dsolocalNameAttr, parser.getBuilder().getUnitAttr()); StringAttr nameAttr; SmallVector arguments; diff --git a/clang/test/CIR/IR/func-dsolocal-parser.cir b/clang/test/CIR/IR/func-dsolocal-parser.cir new file mode 100644 index 000000000000..1d8322cd8e26 --- /dev/null +++ b/clang/test/CIR/IR/func-dsolocal-parser.cir @@ -0,0 +1,13 @@ +// RUN: cir-opt %s | FileCheck %s + +!s32i = !cir.int +#fn_attr = #cir, nothrow = #cir.nothrow, optnone = #cir.optnone})> +module { + cir.func dsolocal @foo(%arg0: !s32i ) extra(#fn_attr) { + %0 = cir.alloca !s32i, !cir.ptr, ["i", init] {alignment = 4 : i64} + cir.store %arg0, %0 : !s32i, !cir.ptr + cir.return + } +} + +// CHECK: cir.func dsolocal @foo(%arg0: !s32i) extra(#fn_attr)