@@ -622,9 +622,12 @@ TEST(LinkGraphTest, SplitBlock) {
622
622
false , false );
623
623
auto &S4 = G.addDefinedSymbol (B1, 12 , " S4" , 4 , Linkage::Strong,
624
624
Scope::Default, false , false );
625
- // Add a symbol that extends beyond the split.
625
+ // Add some symbols that extend beyond splits, one in the first block and one
626
+ // in a subsequent block.
626
627
auto &S5 = G.addDefinedSymbol (B1, 0 , " S5" , 16 , Linkage::Strong,
627
628
Scope::Default, false , false );
629
+ auto &S6 = G.addDefinedSymbol (B1, 6 , " S6" , 10 , Linkage::Strong,
630
+ Scope::Default, false , false );
628
631
629
632
// Add an extra block, EB, and target symbols, and use these to add edges
630
633
// from B1 to EB.
@@ -646,54 +649,56 @@ TEST(LinkGraphTest, SplitBlock) {
646
649
B1.addEdge (Edge::FirstRelocation, 12 , ES4, 0 );
647
650
648
651
// Split B1.
649
- auto Blocks = G.splitBlock (B1, ArrayRef<int >({8 }));
652
+ auto Blocks = G.splitBlock (B1, ArrayRef<int >({4 , 12 }));
650
653
651
- EXPECT_EQ (Blocks.size (), 2U );
654
+ EXPECT_EQ (Blocks.size (), 3U );
652
655
EXPECT_EQ (Blocks[0 ], &B1);
653
656
auto &B2 = *Blocks[1 ];
657
+ auto &B3 = *Blocks[2 ];
654
658
655
659
// Check that the block addresses and content matches what we would expect.
656
660
EXPECT_EQ (B1.getAddress (), B1Addr);
657
- EXPECT_EQ (B1.getContent (), BlockContent.slice (0 , 8 ));
658
- EXPECT_EQ (B1.edges_size (), 2U );
661
+ EXPECT_EQ (B1.getContent (), BlockContent.slice (0 , 4 ));
662
+ EXPECT_EQ (B1.edges_size (), 1U );
659
663
660
- EXPECT_EQ (B2.getAddress (), B1Addr + 8 );
661
- EXPECT_EQ (B2.getContent (), BlockContent.slice (8 ));
664
+ EXPECT_EQ (B2.getAddress (), B1Addr + 4 );
665
+ EXPECT_EQ (B2.getContent (), BlockContent.slice (4 , 8 ));
662
666
EXPECT_EQ (B2.edges_size (), 2U );
663
667
668
+ EXPECT_EQ (B3.getAddress (), B1Addr + 12 );
669
+ EXPECT_EQ (B3.getContent (), BlockContent.slice (12 ));
670
+ EXPECT_EQ (B3.edges_size (), 1U );
671
+
664
672
// Check that symbols in B2 were transferred as expected:
665
- // We expect S1 and S2 to have been transferred to B1, and S3 and S4 to have
666
- // remained attached to B2 . Symbols S3 and S4 should have had their offsets
667
- // slid to account for the change in address of B1 .
673
+ // We expect S1 and S5 to have been transferred to B1; S2, S3 and S6 to
674
+ // B2; and S4 to B3 . Symbols should have had their offsets slid to account
675
+ // for the change of containing block .
668
676
EXPECT_EQ (&S1.getBlock (), &B1);
669
677
EXPECT_EQ (S1.getOffset (), 0U );
670
678
671
- EXPECT_EQ (&S2.getBlock (), &B1 );
672
- EXPECT_EQ (S2.getOffset (), 4U );
679
+ EXPECT_EQ (&S2.getBlock (), &B2 );
680
+ EXPECT_EQ (S2.getOffset (), 0U );
673
681
674
682
EXPECT_EQ (&S3.getBlock (), &B2);
675
- EXPECT_EQ (S3.getOffset (), 0U );
683
+ EXPECT_EQ (S3.getOffset (), 4U );
676
684
677
- EXPECT_EQ (&S4.getBlock (), &B2 );
678
- EXPECT_EQ (S4.getOffset (), 4U );
685
+ EXPECT_EQ (&S4.getBlock (), &B3 );
686
+ EXPECT_EQ (S4.getOffset (), 0U );
679
687
680
688
EXPECT_EQ (&S5.getBlock (), &B1);
681
689
EXPECT_EQ (S5.getOffset (), 0U );
682
690
691
+ EXPECT_EQ (&S6.getBlock (), &B2);
692
+ EXPECT_EQ (S6.getOffset (), 2U );
693
+
683
694
// Size shrinks to fit.
684
- EXPECT_EQ (S5.getSize (), 8U );
685
-
686
- // Check that edges in B2 have been transferred as expected:
687
- // Both blocks should now have two edges each at offsets 0 and 4.
688
- EXPECT_EQ (llvm::size (B1.edges ()), 2 );
689
- if (size (B1.edges ()) == 2 ) {
690
- auto *E1 = &*B1.edges ().begin ();
691
- auto *E2 = &*(B1.edges ().begin () + 1 );
692
- if (E2 ->getOffset () < E1 ->getOffset ())
693
- std::swap (E1 , E2 );
694
- EXPECT_EQ (E1 ->getOffset (), 0U );
695
- EXPECT_EQ (E2 ->getOffset (), 4U );
696
- }
695
+ EXPECT_EQ (S5.getSize (), 4U );
696
+ EXPECT_EQ (S6.getSize (), 6U );
697
+
698
+ // Check that edges in have been transferred as expected:
699
+ EXPECT_EQ (llvm::size (B1.edges ()), 1 );
700
+ if (size (B1.edges ()) == 2 )
701
+ EXPECT_EQ (B1.edges ().begin ()->getOffset (), 0U );
697
702
698
703
EXPECT_EQ (llvm::size (B2.edges ()), 2 );
699
704
if (size (B2.edges ()) == 2 ) {
@@ -704,6 +709,10 @@ TEST(LinkGraphTest, SplitBlock) {
704
709
EXPECT_EQ (E1 ->getOffset (), 0U );
705
710
EXPECT_EQ (E2 ->getOffset (), 4U );
706
711
}
712
+
713
+ EXPECT_EQ (llvm::size (B3.edges ()), 1 );
714
+ if (size (B3.edges ()) == 2 )
715
+ EXPECT_EQ (B3.edges ().begin ()->getOffset (), 0U );
707
716
}
708
717
709
718
TEST (LinkGraphTest, GraphAllocationMethods) {
0 commit comments