@@ -1858,23 +1858,9 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
18581858 auto IT = WS.begin ();
18591859 if (IT == WS.end ())
18601860 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))
18781864 report_fatal_error (" only data supported in .init_array section" );
18791865
18801866 uint16_t Priority = UINT16_MAX;
@@ -1886,9 +1872,8 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
18861872 if (WS.getName ().substr (PrefixLength + 1 ).getAsInteger (10 , Priority))
18871873 report_fatal_error (" invalid .init_array section priority" );
18881874 }
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 ()) {
18921877 assert (Fixup.getKind () ==
18931878 MCFixup::getDataKindForSize (is64Bit () ? 8 : 4 ));
18941879 const MCExpr *Expr = Fixup.getValue ();
0 commit comments