Skip to content

Commit 01ae70b

Browse files
committed
[CIR] Upstream attributes followup
Better parameter names for `CIRBaseBuilderTy::getConstPtrAttr` Slightly better error handling for `IntAttr::parse`
1 parent f81f3d0 commit 01ae70b

File tree

2 files changed

+23
-19
lines changed

2 files changed

+23
-19
lines changed

clang/include/clang/CIR/Dialect/Builder/CIRBaseBuilder.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ class CIRBaseBuilderTy : public mlir::OpBuilder {
3131
return getPointerTo(cir::VoidType::get(getContext()));
3232
}
3333

34-
mlir::TypedAttr getConstPtrAttr(mlir::Type t, int64_t v) {
35-
auto val =
36-
mlir::IntegerAttr::get(mlir::IntegerType::get(t.getContext(), 64), v);
37-
return cir::ConstPtrAttr::get(getContext(), mlir::cast<cir::PointerType>(t),
38-
val);
34+
mlir::TypedAttr getConstPtrAttr(mlir::Type type, int64_t value) {
35+
auto valueAttr = mlir::IntegerAttr::get(
36+
mlir::IntegerType::get(type.getContext(), 64), value);
37+
return cir::ConstPtrAttr::get(
38+
getContext(), mlir::cast<cir::PointerType>(type), valueAttr);
3939
}
4040
};
4141

clang/lib/CIR/Dialect/IR/CIRAttrs.cpp

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,23 +96,27 @@ Attribute IntAttr::parse(AsmParser &parser, Type odsType) {
9696

9797
// Fetch arbitrary precision integer value.
9898
if (type.isSigned()) {
99-
int64_t value;
100-
if (parser.parseInteger(value))
99+
int64_t value = 0;
100+
if (parser.parseInteger(value)) {
101101
parser.emitError(parser.getCurrentLocation(), "expected integer value");
102-
apValue = mlir::APInt(type.getWidth(), value, type.isSigned(),
103-
/*implicitTrunc=*/true);
104-
if (apValue.getSExtValue() != value)
105-
parser.emitError(parser.getCurrentLocation(),
106-
"integer value too large for the given type");
102+
} else {
103+
apValue = mlir::APInt(type.getWidth(), value, type.isSigned(),
104+
/*implicitTrunc=*/true);
105+
if (apValue.getSExtValue() != value)
106+
parser.emitError(parser.getCurrentLocation(),
107+
"integer value too large for the given type");
108+
}
107109
} else {
108-
uint64_t value;
109-
if (parser.parseInteger(value))
110+
uint64_t value = 0;
111+
if (parser.parseInteger(value)) {
110112
parser.emitError(parser.getCurrentLocation(), "expected integer value");
111-
apValue = mlir::APInt(type.getWidth(), value, type.isSigned(),
112-
/*implicitTrunc=*/true);
113-
if (apValue.getZExtValue() != value)
114-
parser.emitError(parser.getCurrentLocation(),
115-
"integer value too large for the given type");
113+
} else {
114+
apValue = mlir::APInt(type.getWidth(), value, type.isSigned(),
115+
/*implicitTrunc=*/true);
116+
if (apValue.getZExtValue() != value)
117+
parser.emitError(parser.getCurrentLocation(),
118+
"integer value too large for the given type");
119+
}
116120
}
117121

118122
// Consume the '>' symbol.

0 commit comments

Comments
 (0)