|
@@ -1277,9 +1277,10 @@ TEST(LazyCallGraphTest, InternalEdgeMutation) {
|
|
|
// be invalidated.
|
|
|
LazyCallGraph::SCC &AC = *CG.lookupSCC(A);
|
|
|
LazyCallGraph::SCC &CC = *CG.lookupSCC(C);
|
|
|
- auto InvalidatedSCCs = RC.switchInternalEdgeToCall(A, C);
|
|
|
- ASSERT_EQ(1u, InvalidatedSCCs.size());
|
|
|
- EXPECT_EQ(&AC, InvalidatedSCCs[0]);
|
|
|
+ EXPECT_TRUE(RC.switchInternalEdgeToCall(A, C, [&](ArrayRef<LazyCallGraph::SCC *> MergedCs) {
|
|
|
+ ASSERT_EQ(1u, MergedCs.size());
|
|
|
+ EXPECT_EQ(&AC, MergedCs[0]);
|
|
|
+ }));
|
|
|
EXPECT_EQ(2, CC.size());
|
|
|
EXPECT_EQ(&CC, CG.lookupSCC(A));
|
|
|
EXPECT_EQ(&CC, CG.lookupSCC(C));
|
|
@@ -1586,8 +1587,7 @@ TEST(LazyCallGraphTest, InternalRefEdgeToCall) {
|
|
|
|
|
|
// Switch the ref edge from A -> D to a call edge. This should have no
|
|
|
// effect as it is already in postorder and no new cycles are formed.
|
|
|
- auto MergedCs = RC.switchInternalEdgeToCall(A, D);
|
|
|
- EXPECT_EQ(0u, MergedCs.size());
|
|
|
+ EXPECT_FALSE(RC.switchInternalEdgeToCall(A, D));
|
|
|
ASSERT_EQ(4, RC.size());
|
|
|
EXPECT_EQ(&DC, &RC[0]);
|
|
|
EXPECT_EQ(&BC, &RC[1]);
|
|
@@ -1596,8 +1596,7 @@ TEST(LazyCallGraphTest, InternalRefEdgeToCall) {
|
|
|
|
|
|
// Switch B -> C to a call edge. This doesn't form any new cycles but does
|
|
|
// require reordering the SCCs.
|
|
|
- MergedCs = RC.switchInternalEdgeToCall(B, C);
|
|
|
- EXPECT_EQ(0u, MergedCs.size());
|
|
|
+ EXPECT_FALSE(RC.switchInternalEdgeToCall(B, C));
|
|
|
ASSERT_EQ(4, RC.size());
|
|
|
EXPECT_EQ(&DC, &RC[0]);
|
|
|
EXPECT_EQ(&CC, &RC[1]);
|
|
@@ -1605,9 +1604,10 @@ TEST(LazyCallGraphTest, InternalRefEdgeToCall) {
|
|
|
EXPECT_EQ(&AC, &RC[3]);
|
|
|
|
|
|
// Switch C -> B to a call edge. This forms a cycle and forces merging SCCs.
|
|
|
- MergedCs = RC.switchInternalEdgeToCall(C, B);
|
|
|
- ASSERT_EQ(1u, MergedCs.size());
|
|
|
- EXPECT_EQ(&CC, MergedCs[0]);
|
|
|
+ EXPECT_TRUE(RC.switchInternalEdgeToCall(C, B, [&](ArrayRef<LazyCallGraph::SCC *> MergedCs) {
|
|
|
+ ASSERT_EQ(1u, MergedCs.size());
|
|
|
+ EXPECT_EQ(&CC, MergedCs[0]);
|
|
|
+ }));
|
|
|
ASSERT_EQ(3, RC.size());
|
|
|
EXPECT_EQ(&DC, &RC[0]);
|
|
|
EXPECT_EQ(&BC, &RC[1]);
|
|
@@ -1720,8 +1720,7 @@ TEST(LazyCallGraphTest, InternalRefEdgeToCallNoCycleInterleaved) {
|
|
|
// Switch C3 -> B1 to a call edge. This doesn't form any new cycles but does
|
|
|
// require reordering the SCCs in the face of tricky internal node
|
|
|
// structures.
|
|
|
- auto MergedCs = RC.switchInternalEdgeToCall(C3, B1);
|
|
|
- EXPECT_EQ(0u, MergedCs.size());
|
|
|
+ EXPECT_FALSE(RC.switchInternalEdgeToCall(C3, B1));
|
|
|
ASSERT_EQ(8, RC.size());
|
|
|
EXPECT_EQ(&DC, &RC[0]);
|
|
|
EXPECT_EQ(&B3C, &RC[1]);
|
|
@@ -1852,10 +1851,12 @@ TEST(LazyCallGraphTest, InternalRefEdgeToCallBothPartitionAndMerge) {
|
|
|
// C F C | |
|
|
|
// \ / \ / |
|
|
|
// G G |
|
|
|
- auto MergedCs = RC.switchInternalEdgeToCall(F, B);
|
|
|
- ASSERT_EQ(2u, MergedCs.size());
|
|
|
- EXPECT_EQ(&FC, MergedCs[0]);
|
|
|
- EXPECT_EQ(&DC, MergedCs[1]);
|
|
|
+ EXPECT_TRUE(RC.switchInternalEdgeToCall(
|
|
|
+ F, B, [&](ArrayRef<LazyCallGraph::SCC *> MergedCs) {
|
|
|
+ ASSERT_EQ(2u, MergedCs.size());
|
|
|
+ EXPECT_EQ(&FC, MergedCs[0]);
|
|
|
+ EXPECT_EQ(&DC, MergedCs[1]);
|
|
|
+ }));
|
|
|
EXPECT_EQ(3, BC.size());
|
|
|
|
|
|
// And make sure the postorder was updated.
|