MC: Explicitly check that only virtual fragments appear in virtual sections.

llvm-svn: 103663
This commit is contained in:
Daniel Dunbar 2010-05-12 22:51:35 +00:00
parent 597eb48168
commit 7cd309f7dc
1 changed files with 23 additions and 0 deletions

View File

@ -534,6 +534,9 @@ static void WriteFragmentData(const MCAssembler &Asm, const MCAsmLayout &Layout,
case MCFragment::FT_Fill: {
MCFillFragment &FF = cast<MCFillFragment>(F);
assert(FF.getValueSize() && "Invalid virtual align in concrete fragment!");
for (uint64_t i = 0, e = FF.getSize() / FF.getValueSize(); i != e; ++i) {
switch (FF.getValueSize()) {
default:
@ -578,6 +581,26 @@ void MCAssembler::WriteSectionData(const MCSectionData *SD,
// Ignore virtual sections.
if (getBackend().isVirtualSection(SD->getSection())) {
assert(SectionFileSize == 0 && "Invalid size for section!");
// Check that contents are only things legal inside a virtual section.
for (MCSectionData::const_iterator it = SD->begin(),
ie = SD->end(); it != ie; ++it) {
switch (it->getKind()) {
default:
assert(0 && "Invalid fragment in virtual section!");
case MCFragment::FT_Align:
assert(!cast<MCAlignFragment>(it)->getValueSize() &&
"Invalid align in virtual section!");
break;
case MCFragment::FT_Fill:
assert(!cast<MCFillFragment>(it)->getValueSize() &&
"Invalid fill in virtual section!");
break;
case MCFragment::FT_ZeroFill:
break;
}
}
return;
}