forked from OSchip/llvm-project
[MLIR][Presburger] Make constructors from PresburgerSpace explicit
This patch makes constructors of IntegerRelation, IntegerPolyhedron, PresburgerRelation, PresburgerSet from PresburgerSpace explicit. This prevents bugs like: ``` void fun(IntegerRelation a, IntegerRelation b) { IntegerPolyhedron c = a.intersect(b); } ``` Here, `a.intersect(b)` will return `IntegerRelation`, which will be implicitly converted to `PresburgerSpace` and will use the `PresburgerSpace` constructor for IntegerPolyhedron. Leading to loss of any constraints in the intersection of `a` and `b`. After this patch, this will give a compile error. Reviewed By: arjunp Differential Revision: https://reviews.llvm.org/D122972
This commit is contained in:
parent
cc2139524f
commit
86f255360c
|
@ -66,7 +66,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Constructs a relation with the specified number of dimensions and symbols.
|
/// Constructs a relation with the specified number of dimensions and symbols.
|
||||||
IntegerRelation(const PresburgerSpace &space)
|
explicit IntegerRelation(const PresburgerSpace &space)
|
||||||
: IntegerRelation(/*numReservedInequalities=*/0,
|
: IntegerRelation(/*numReservedInequalities=*/0,
|
||||||
/*numReservedEqualities=*/0,
|
/*numReservedEqualities=*/0,
|
||||||
/*numReservedCols=*/space.getNumIds() + 1, space) {}
|
/*numReservedCols=*/space.getNumIds() + 1, space) {}
|
||||||
|
@ -567,7 +567,7 @@ public:
|
||||||
|
|
||||||
/// Constructs a relation with the specified number of dimensions and
|
/// Constructs a relation with the specified number of dimensions and
|
||||||
/// symbols.
|
/// symbols.
|
||||||
IntegerPolyhedron(const PresburgerSpace &space)
|
explicit IntegerPolyhedron(const PresburgerSpace &space)
|
||||||
: IntegerPolyhedron(/*numReservedInequalities=*/0,
|
: IntegerPolyhedron(/*numReservedInequalities=*/0,
|
||||||
/*numReservedEqualities=*/0,
|
/*numReservedEqualities=*/0,
|
||||||
/*numReservedCols=*/space.getNumIds() + 1, space) {}
|
/*numReservedCols=*/space.getNumIds() + 1, space) {}
|
||||||
|
|
|
@ -116,7 +116,8 @@ public:
|
||||||
protected:
|
protected:
|
||||||
/// Construct an empty PresburgerRelation with the specified number of
|
/// Construct an empty PresburgerRelation with the specified number of
|
||||||
/// dimension and symbols.
|
/// dimension and symbols.
|
||||||
PresburgerRelation(const PresburgerSpace &space) : PresburgerSpace(space) {
|
explicit PresburgerRelation(const PresburgerSpace &space)
|
||||||
|
: PresburgerSpace(space) {
|
||||||
assert(space.getNumLocalIds() == 0 &&
|
assert(space.getNumLocalIds() == 0 &&
|
||||||
"PresburgerRelation cannot have local ids.");
|
"PresburgerRelation cannot have local ids.");
|
||||||
}
|
}
|
||||||
|
@ -151,7 +152,8 @@ public:
|
||||||
protected:
|
protected:
|
||||||
/// Construct an empty PresburgerRelation with the specified number of
|
/// Construct an empty PresburgerRelation with the specified number of
|
||||||
/// dimension and symbols.
|
/// dimension and symbols.
|
||||||
PresburgerSet(const PresburgerSpace &space) : PresburgerRelation(space) {
|
explicit PresburgerSet(const PresburgerSpace &space)
|
||||||
|
: PresburgerRelation(space) {
|
||||||
assert(space.getNumDomainIds() == 0 && "Set type cannot have domain ids.");
|
assert(space.getNumDomainIds() == 0 && "Set type cannot have domain ids.");
|
||||||
assert(space.getNumLocalIds() == 0 &&
|
assert(space.getNumLocalIds() == 0 &&
|
||||||
"PresburgerRelation cannot have local ids.");
|
"PresburgerRelation cannot have local ids.");
|
||||||
|
|
Loading…
Reference in New Issue