@@ -1858,23 +1858,9 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
1858
1858
auto IT = WS.begin ();
1859
1859
if (IT == WS.end ())
1860
1860
continue ;
1861
- const MCFragment &EmptyFrag = *IT;
1862
- if (EmptyFrag.getKind () != MCFragment::FT_Data)
1863
- report_fatal_error (" .init_array section should be aligned" );
1864
-
1865
- const MCFragment *nextFrag = EmptyFrag.getNext ();
1866
- while (nextFrag != nullptr ) {
1867
- const MCFragment &AlignFrag = *nextFrag;
1868
- if (AlignFrag.getKind () != MCFragment::FT_Align)
1869
- report_fatal_error (" .init_array section should be aligned" );
1870
- if (cast<MCAlignFragment>(AlignFrag).getAlignment () !=
1871
- Align (is64Bit () ? 8 : 4 ))
1872
- report_fatal_error (
1873
- " .init_array section should be aligned for pointers" );
1874
-
1875
- const MCFragment &Frag = *AlignFrag.getNext ();
1876
- nextFrag = Frag.getNext ();
1877
- if (Frag.hasInstructions () || Frag.getKind () != MCFragment::FT_Data)
1861
+ for (auto *Frag = &*IT; Frag; Frag = Frag->getNext ()) {
1862
+ if (Frag->hasInstructions () || (Frag->getKind () != MCFragment::FT_Align &&
1863
+ Frag->getKind () != MCFragment::FT_Data))
1878
1864
report_fatal_error (" only data supported in .init_array section" );
1879
1865
1880
1866
uint16_t Priority = UINT16_MAX;
@@ -1886,9 +1872,8 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
1886
1872
if (WS.getName ().substr (PrefixLength + 1 ).getAsInteger (10 , Priority))
1887
1873
report_fatal_error (" invalid .init_array section priority" );
1888
1874
}
1889
- const auto &DataFrag = Frag;
1890
- assert (llvm::all_of (DataFrag.getContents (), [](char C) { return !C; }));
1891
- for (const MCFixup &Fixup : DataFrag.getFixups ()) {
1875
+ assert (llvm::all_of (Frag->getContents (), [](char C) { return !C; }));
1876
+ for (const MCFixup &Fixup : Frag->getFixups ()) {
1892
1877
assert (Fixup.getKind () ==
1893
1878
MCFixup::getDataKindForSize (is64Bit () ? 8 : 4 ));
1894
1879
const MCExpr *Expr = Fixup.getValue ();
0 commit comments