mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Fix bug: Assembler/2003-05-03-BytecodeReaderProblem.llx
by emitting the type planes before any constants (which could be constant expressions involving undefined types!) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6285 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a2602f3dfd
commit
f69315bd79
@ -125,25 +125,34 @@ void BytecodeWriter::outputConstants(bool isFunction) {
|
||||
BytecodeBlock CPool(BytecodeFormat::ConstantPool, Out);
|
||||
|
||||
unsigned NumPlanes = Table.getNumPlanes();
|
||||
|
||||
for (unsigned pno = 0; pno != NumPlanes; pno++) {
|
||||
const std::vector<const Value*> &Plane = Table.getPlane(pno);
|
||||
|
||||
// Output the type plane before any constants!
|
||||
if (isFunction && NumPlanes > Type::TypeTyID) {
|
||||
const std::vector<const Value*> &Plane = Table.getPlane(Type::TypeTyID);
|
||||
if (!Plane.empty()) { // Skip empty type planes...
|
||||
unsigned ValNo = 0;
|
||||
if (isFunction) // Don't reemit module constants
|
||||
ValNo += Table.getModuleLevel(pno);
|
||||
else if (pno == Type::TypeTyID) // If type plane wasn't written out above
|
||||
continue;
|
||||
|
||||
if (pno >= Type::FirstDerivedTyID) {
|
||||
// Skip zero initializer
|
||||
if (ValNo == 0)
|
||||
ValNo = 1;
|
||||
}
|
||||
|
||||
outputConstantsInPlane(Plane, ValNo); // Write out constants in the plane
|
||||
unsigned ValNo = Table.getModuleLevel(Type::TypeTyID);
|
||||
outputConstantsInPlane(Plane, ValNo);
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned pno = 0; pno != NumPlanes; pno++)
|
||||
if (pno != Type::TypeTyID) { // Type plane handled above.
|
||||
const std::vector<const Value*> &Plane = Table.getPlane(pno);
|
||||
if (!Plane.empty()) { // Skip empty type planes...
|
||||
unsigned ValNo = 0;
|
||||
if (isFunction) // Don't reemit module constants
|
||||
ValNo += Table.getModuleLevel(pno);
|
||||
|
||||
if (pno >= Type::FirstDerivedTyID) {
|
||||
// Skip zero initializer
|
||||
if (ValNo == 0)
|
||||
ValNo = 1;
|
||||
}
|
||||
|
||||
// Write out constants in the plane
|
||||
outputConstantsInPlane(Plane, ValNo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BytecodeWriter::outputModuleInfoBlock(const Module *M) {
|
||||
|
Loading…
Reference in New Issue
Block a user