diff options
author | Oleksandr "Alex" Zinenko <zinenko@google.com> | 2023-12-21 17:58:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-21 17:58:53 +0100 |
commit | 11140cc238b8c4124e6f9efacb1601f81da096a0 (patch) | |
tree | adbd73e221528c6b5409d730c39ba8bc5cf78d62 | |
parent | 72003adf6bd44e91778c22e42e94a28c28be2339 (diff) |
[mlir] mark ChangeResult as nodiscard (#76147)
This enum is used by dataflow analyses to indicate whether further
propagation is necessary to reach the fix point. Accidentally discarding
such a value will likely lead to propagation stopping early, leading to
incomplete or incorrect results. The most egregious example is the
duality between `join` on the analysis class, which triggers propagation
internally, and `join` on the lattice class that does not and expects
the caller to trigger it depending on the returned `ChangeResult`.
-rw-r--r-- | mlir/include/mlir/Analysis/DataFlowFramework.h | 4 | ||||
-rw-r--r-- | mlir/lib/Analysis/DataFlow/LivenessAnalysis.cpp | 2 | ||||
-rw-r--r-- | mlir/test/lib/Analysis/TestDataFlowFramework.cpp | 2 |
3 files changed, 4 insertions, 4 deletions
diff --git a/mlir/include/mlir/Analysis/DataFlowFramework.h b/mlir/include/mlir/Analysis/DataFlowFramework.h index 541cdb1e237c..c76cfac07fc7 100644 --- a/mlir/include/mlir/Analysis/DataFlowFramework.h +++ b/mlir/include/mlir/Analysis/DataFlowFramework.h @@ -30,8 +30,8 @@ namespace mlir { //===----------------------------------------------------------------------===// /// A result type used to indicate if a change happened. Boolean operations on -/// ChangeResult behave as though `Change` is truthy. -enum class ChangeResult { +/// ChangeResult behave as though `Change` is truth. +enum class [[nodiscard]] ChangeResult { NoChange, Change, }; diff --git a/mlir/lib/Analysis/DataFlow/LivenessAnalysis.cpp b/mlir/lib/Analysis/DataFlow/LivenessAnalysis.cpp index 2820d27b65f7..7875fa9d43d9 100644 --- a/mlir/lib/Analysis/DataFlow/LivenessAnalysis.cpp +++ b/mlir/lib/Analysis/DataFlow/LivenessAnalysis.cpp @@ -191,7 +191,7 @@ void LivenessAnalysis::visitCallOperand(OpOperand &operand) { void LivenessAnalysis::setToExitState(Liveness *lattice) { // This marks values of type (2) liveness as "live". - lattice->markLive(); + (void)lattice->markLive(); } //===----------------------------------------------------------------------===// diff --git a/mlir/test/lib/Analysis/TestDataFlowFramework.cpp b/mlir/test/lib/Analysis/TestDataFlowFramework.cpp index ed361b5a0e27..b6b33182440c 100644 --- a/mlir/test/lib/Analysis/TestDataFlowFramework.cpp +++ b/mlir/test/lib/Analysis/TestDataFlowFramework.cpp @@ -100,7 +100,7 @@ LogicalResult FooAnalysis::initialize(Operation *top) { return top->emitError("expected at least one block in the region"); // Initialize the top-level state. - getOrCreate<FooState>(&top->getRegion(0).front())->join(0); + (void)getOrCreate<FooState>(&top->getRegion(0).front())->join(0); // Visit all nested blocks and operations. for (Block &block : top->getRegion(0)) { |