li.zhe.hua created this revision.
li.zhe.hua added a reviewer: ymandel.
Herald added subscribers: martong, xazax.hun.
Herald added a reviewer: NoQ.
Herald added a project: All.
li.zhe.hua requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
A follow-up to D131688 <https://reviews.llvm.org/D131688> to remove references
to the enum within the
dataflow framework and its tests.
Depends on D131688 <https://reviews.llvm.org/D131688>
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D131691
Files:
clang/include/clang/Analysis/FlowSensitive/MapLattice.h
clang/include/clang/Analysis/FlowSensitive/NoopLattice.h
clang/unittests/Analysis/FlowSensitive/MapLatticeTest.cpp
clang/unittests/Analysis/FlowSensitive/MatchSwitchTest.cpp
clang/unittests/Analysis/FlowSensitive/MultiVarConstantPropagationTest.cpp
clang/unittests/Analysis/FlowSensitive/SingleVarConstantPropagationTest.cpp
clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp
Index: clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp
===================================================================
--- clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp
+++ clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp
@@ -16,7 +16,6 @@
#include "clang/Analysis/FlowSensitive/DataflowAnalysis.h"
#include "clang/Analysis/FlowSensitive/DataflowAnalysisContext.h"
#include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
-#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
#include "clang/Analysis/FlowSensitive/NoopAnalysis.h"
#include "clang/Analysis/FlowSensitive/Value.h"
#include "clang/Analysis/FlowSensitive/WatchedLiteralsSolver.h"
@@ -92,17 +91,13 @@
}
struct HasWidenLattice {
- HasWidenLattice() {
- ON_CALL(*this, join).WillByDefault([](const HasWidenLattice &) {
- return LatticeJoinEffect::Unchanged;
- });
- }
+ HasWidenLattice() = default;
// Mock objects are not copyable by default. Since this is a monostate,
// delegate to the default ctor.
HasWidenLattice(const HasWidenLattice &) : HasWidenLattice() {}
HasWidenLattice &operator=(const HasWidenLattice &) { return *this; }
- MOCK_METHOD(LatticeJoinEffect, join, (const HasWidenLattice &));
+ MOCK_METHOD(void, join, (const HasWidenLattice &));
MOCK_METHOD(void, widen, (const HasWidenLattice &));
friend bool operator==(const HasWidenLattice &, const HasWidenLattice &) {
@@ -140,17 +135,13 @@
}
struct OnlyJoinLattice {
- OnlyJoinLattice() {
- ON_CALL(*this, join).WillByDefault([](const OnlyJoinLattice &) {
- return LatticeJoinEffect::Unchanged;
- });
- }
+ OnlyJoinLattice() = default;
// Mock objects are not copyable by default. Since this is a monostate,
// delegate to the default ctor.
OnlyJoinLattice(const OnlyJoinLattice &) : OnlyJoinLattice() {}
OnlyJoinLattice &operator=(const OnlyJoinLattice &) { return *this; }
- MOCK_METHOD(LatticeJoinEffect, join, (const OnlyJoinLattice &));
+ MOCK_METHOD(void, join, (const OnlyJoinLattice &));
friend bool operator==(const OnlyJoinLattice &, const OnlyJoinLattice &) {
return true;
@@ -191,12 +182,7 @@
return State == Other.State;
}
- LatticeJoinEffect join(const NonConvergingLattice &Other) {
- if (Other.State == 0)
- return LatticeJoinEffect::Unchanged;
- State += Other.State;
- return LatticeJoinEffect::Changed;
- }
+ void join(const NonConvergingLattice &Other) { State += Other.State; }
};
class NonConvergingAnalysis
@@ -236,12 +222,9 @@
return State == Other.State;
}
- LatticeJoinEffect join(const ConvergesOnWidenLattice &Other) {
- auto Prev = *this;
+ void join(const ConvergesOnWidenLattice &Other) {
Top = Top || Other.Top;
State += Other.State;
- return Prev == *this ? LatticeJoinEffect::Unchanged
- : LatticeJoinEffect::Changed;
}
void widen(const ConvergesOnWidenLattice &Other) { Top = true; }
@@ -286,14 +269,9 @@
return CalledFunctions == Other.CalledFunctions;
}
- LatticeJoinEffect join(const FunctionCallLattice &Other) {
- if (Other.CalledFunctions.empty())
- return LatticeJoinEffect::Unchanged;
- const size_t size_before = CalledFunctions.size();
+ void join(const FunctionCallLattice &Other) {
CalledFunctions.insert(Other.CalledFunctions.begin(),
Other.CalledFunctions.end());
- return CalledFunctions.size() == size_before ? LatticeJoinEffect::Unchanged
- : LatticeJoinEffect::Changed;
}
};
Index: clang/unittests/Analysis/FlowSensitive/SingleVarConstantPropagationTest.cpp
===================================================================
--- clang/unittests/Analysis/FlowSensitive/SingleVarConstantPropagationTest.cpp
+++ clang/unittests/Analysis/FlowSensitive/SingleVarConstantPropagationTest.cpp
@@ -21,14 +21,11 @@
#include "clang/ASTMatchers/ASTMatchers.h"
#include "clang/Analysis/FlowSensitive/DataflowAnalysis.h"
#include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
-#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
-#include "clang/Tooling/Tooling.h"
#include "llvm/ADT/None.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Error.h"
-#include "llvm/Testing/Support/Annotations.h"
#include "llvm/Testing/Support/Error.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
@@ -72,17 +69,16 @@
return Lhs.Data == Rhs.Data;
}
- LatticeJoinEffect join(const ConstantPropagationLattice &Other) {
+ void join(const ConstantPropagationLattice &Other) {
if (*this == Other || Other == bottom() || *this == top())
- return LatticeJoinEffect::Unchanged;
+ return;
if (*this == bottom()) {
*this = Other;
- return LatticeJoinEffect::Changed;
+ return;
}
*this = top();
- return LatticeJoinEffect::Changed;
}
};
Index: clang/unittests/Analysis/FlowSensitive/MultiVarConstantPropagationTest.cpp
===================================================================
--- clang/unittests/Analysis/FlowSensitive/MultiVarConstantPropagationTest.cpp
+++ clang/unittests/Analysis/FlowSensitive/MultiVarConstantPropagationTest.cpp
@@ -21,15 +21,12 @@
#include "clang/ASTMatchers/ASTMatchers.h"
#include "clang/Analysis/FlowSensitive/DataflowAnalysis.h"
#include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
-#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
#include "clang/Analysis/FlowSensitive/MapLattice.h"
-#include "clang/Tooling/Tooling.h"
#include "llvm/ADT/None.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Error.h"
-#include "llvm/Testing/Support/Annotations.h"
#include "llvm/Testing/Support/Error.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
@@ -79,17 +76,16 @@
return !(Lhs == Rhs);
}
- LatticeJoinEffect join(const ValueLattice &Other) {
+ void join(const ValueLattice &Other) {
if (*this == Other || Other == bottom() || *this == top())
- return LatticeJoinEffect::Unchanged;
+ return;
if (*this == bottom()) {
*this = Other;
- return LatticeJoinEffect::Changed;
+ return;
}
*this = top();
- return LatticeJoinEffect::Changed;
}
};
Index: clang/unittests/Analysis/FlowSensitive/MatchSwitchTest.cpp
===================================================================
--- clang/unittests/Analysis/FlowSensitive/MatchSwitchTest.cpp
+++ clang/unittests/Analysis/FlowSensitive/MatchSwitchTest.cpp
@@ -22,7 +22,6 @@
#include "clang/ASTMatchers/ASTMatchers.h"
#include "clang/Analysis/FlowSensitive/DataflowAnalysis.h"
#include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
-#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
#include "clang/Analysis/FlowSensitive/MapLattice.h"
#include "clang/Tooling/Tooling.h"
#include "llvm/ADT/None.h"
@@ -56,12 +55,7 @@
static BooleanLattice top() { return BooleanLattice(true); }
- LatticeJoinEffect join(BooleanLattice Other) {
- auto Prev = Value;
- Value = Value || Other.Value;
- return Prev == Value ? LatticeJoinEffect::Unchanged
- : LatticeJoinEffect::Changed;
- }
+ void join(BooleanLattice Other) { Value = Value || Other.Value; }
friend bool operator==(BooleanLattice LHS, BooleanLattice RHS) {
return LHS.Value == RHS.Value;
Index: clang/unittests/Analysis/FlowSensitive/MapLatticeTest.cpp
===================================================================
--- clang/unittests/Analysis/FlowSensitive/MapLatticeTest.cpp
+++ clang/unittests/Analysis/FlowSensitive/MapLatticeTest.cpp
@@ -1,6 +1,4 @@
#include "clang/Analysis/FlowSensitive/MapLattice.h"
-#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
-#include "llvm/Support/Error.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <ostream>
@@ -19,12 +17,7 @@
static BooleanLattice top() { return BooleanLattice(true); }
- LatticeJoinEffect join(BooleanLattice Other) {
- auto Prev = Value;
- Value = Value || Other.Value;
- return Prev == Value ? LatticeJoinEffect::Unchanged
- : LatticeJoinEffect::Changed;
- }
+ void join(BooleanLattice Other) { Value = Value || Other.Value; }
friend bool operator==(BooleanLattice LHS, BooleanLattice RHS) {
return LHS.Value == RHS.Value;
@@ -91,7 +84,7 @@
UnorderedElementsAre(Pair(Key1, BooleanLattice(false)),
Pair(Key2, BooleanLattice(false))));
- ASSERT_EQ(Lattice1.join(Lattice2), LatticeJoinEffect::Changed);
+ Lattice1.join(Lattice2);
EXPECT_THAT(Lattice1, UnorderedElementsAre(Pair(Key1, BooleanLattice(true)),
Pair(Key2, BooleanLattice(true))));
}
@@ -101,7 +94,7 @@
Lattice.insert({Key1, BooleanLattice(false)});
Lattice.insert({Key2, BooleanLattice(false)});
- ASSERT_EQ(Lattice.join(Lattice), LatticeJoinEffect::Unchanged);
+ Lattice.join(Lattice);
EXPECT_THAT(Lattice, UnorderedElementsAre(Pair(Key1, BooleanLattice(false)),
Pair(Key2, BooleanLattice(false))));
}
@@ -122,7 +115,7 @@
ASSERT_THAT(Lattice2, UnorderedElementsAre(Pair(Key1, BooleanLattice(true)),
Pair(Key2, BooleanLattice(true))));
- ASSERT_EQ(Lattice2.join(Lattice1), LatticeJoinEffect::Unchanged);
+ Lattice2.join(Lattice1);
EXPECT_THAT(Lattice2, UnorderedElementsAre(Pair(Key1, BooleanLattice(true)),
Pair(Key2, BooleanLattice(true))));
}
@@ -133,7 +126,7 @@
MapLattice<int, BooleanLattice> Lattice2;
Lattice2.insert({Key2, BooleanLattice(true)});
- ASSERT_EQ(Lattice1.join(Lattice2), LatticeJoinEffect::Changed);
+ Lattice1.join(Lattice2);
EXPECT_THAT(Lattice1, UnorderedElementsAre(Pair(Key1, BooleanLattice(true)),
Pair(Key2, BooleanLattice(true))));
}
Index: clang/include/clang/Analysis/FlowSensitive/NoopLattice.h
===================================================================
--- clang/include/clang/Analysis/FlowSensitive/NoopLattice.h
+++ clang/include/clang/Analysis/FlowSensitive/NoopLattice.h
@@ -13,7 +13,6 @@
#ifndef LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_NOOP_LATTICE_H
#define LLVM_CLANG_ANALYSIS_FLOWSENSITIVE_NOOP_LATTICE_H
-#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
#include <ostream>
namespace clang {
@@ -26,15 +25,13 @@
public:
bool operator==(const NoopLattice &Other) const { return true; }
- LatticeJoinEffect join(const NoopLattice &Other) {
- return LatticeJoinEffect::Unchanged;
+ void join(const NoopLattice &) {}
+
+ friend std::ostream &operator<<(std::ostream &OS, const NoopLattice &) {
+ return OS << "noop";
}
};
-inline std::ostream &operator<<(std::ostream &OS, const NoopLattice &) {
- return OS << "noop";
-}
-
} // namespace dataflow
} // namespace clang
Index: clang/include/clang/Analysis/FlowSensitive/MapLattice.h
===================================================================
--- clang/include/clang/Analysis/FlowSensitive/MapLattice.h
+++ clang/include/clang/Analysis/FlowSensitive/MapLattice.h
@@ -19,11 +19,8 @@
#include <string>
#include <utility>
-#include "DataflowAnalysis.h"
#include "clang/AST/Decl.h"
-#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/StringRef.h"
namespace clang {
namespace dataflow {
@@ -92,17 +89,14 @@
/// If an entry exists in one map but not the other, the missing entry is
/// treated as implicitly mapping to `bottom`. So, the joined map contains the
/// entry as it was in the source map.
- LatticeJoinEffect join(const MapLattice &Other) {
- LatticeJoinEffect Effect = LatticeJoinEffect::Unchanged;
+ void join(const MapLattice &Other) {
for (const auto &O : Other.C) {
auto It = C.find(O.first);
- if (It == C.end()) {
+ if (It == C.end())
C.insert(O);
- Effect = LatticeJoinEffect::Changed;
- } else if (It->second.join(O.second) == LatticeJoinEffect::Changed)
- Effect = LatticeJoinEffect::Changed;
+ else
+ It->second.join(O.second);
}
- return Effect;
}
};
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits