diff --git a/flang/lib/Optimizer/Dialect/FIROps.cpp b/flang/lib/Optimizer/Dialect/FIROps.cpp index 483f318b649d9..a5b31daa6440a 100644 --- a/flang/lib/Optimizer/Dialect/FIROps.cpp +++ b/flang/lib/Optimizer/Dialect/FIROps.cpp @@ -1348,12 +1348,12 @@ mlir::ParseResult fir::GlobalOp::parse(mlir::OpAsmParser &parser, if (parser.parseOptionalAttrDict(result.attributes)) return mlir::failure(); - if (succeeded(parser.parseOptionalKeyword("constant"))) { + if (succeeded(parser.parseOptionalKeyword(getConstantAttrNameStr()))) { // if "constant" keyword then mark this as a constant, not a variable - result.addAttribute("constant", builder.getUnitAttr()); + result.addAttribute(getConstantAttrNameStr(), builder.getUnitAttr()); } - if (succeeded(parser.parseOptionalKeyword("target"))) + if (succeeded(parser.parseOptionalKeyword(getTargetAttrNameStr()))) result.addAttribute(getTargetAttrNameStr(), builder.getUnitAttr()); mlir::Type globalType; @@ -1382,11 +1382,16 @@ void fir::GlobalOp::print(mlir::OpAsmPrinter &p) { p.printAttributeWithoutType(getSymrefAttr()); if (auto val = getValueOrNull()) p << '(' << val << ')'; - p.printOptionalAttrDict((*this)->getAttrs(), (*this).getAttributeNames()); - if (getOperation()->getAttr(fir::GlobalOp::getConstantAttrNameStr())) - p << " constant"; + // Print all other attributes that are not pretty printed here. + p.printOptionalAttrDict((*this)->getAttrs(), /*elideAttrs=*/{ + getSymNameAttrName(), getSymrefAttrName(), + getTypeAttrName(), getConstantAttrName(), + getTargetAttrName(), getLinkNameAttrName(), + getInitValAttrName()}); + if (getOperation()->getAttr(getConstantAttrName())) + p << " " << getConstantAttrNameStr(); if (getOperation()->getAttr(getTargetAttrName())) - p << " target"; + p << " " << getTargetAttrNameStr(); p << " : "; p.printType(getType()); if (hasInitializationBody()) { diff --git a/flang/test/Fir/fir-ops.fir b/flang/test/Fir/fir-ops.fir index 3c4095b9fdb14..962621c4e2e1a 100644 --- a/flang/test/Fir/fir-ops.fir +++ b/flang/test/Fir/fir-ops.fir @@ -893,3 +893,10 @@ func.func @test_box_typecode(%a: !fir.class) { // CHECK-LABEL: func.func @test_box_typecode( // CHECK-SAME: %[[A:.*]]: !fir.class) // CHECK: %{{.*}} = fir.box_typecode %[[A]] : (!fir.class) -> i32 + +fir.global @t1 {keep_my_attr = "data"} : i32 { + %1 = arith.constant 0 : i32 + fir.has_value %1 : i32 +} + +// CHECK-LABEL: fir.global @t1 {keep_my_attr = "data"} : i32