mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-03 13:31:05 +00:00
- Fix a really nasty bug in the bytecode reader that caused it to fail
reading bytecode files with > 255 types in them, but only when optimization is enabled. This was caused by GCC shrinking an enum to a single byte instead of a whole word. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4266 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5dfab9ec22
commit
8cdc6b726a
@ -48,15 +48,14 @@ bool BytecodeParser::getTypeSlot(const Type *Ty, unsigned &Slot) {
|
||||
}
|
||||
|
||||
const Type *BytecodeParser::getType(unsigned ID) {
|
||||
const Type *T = Type::getPrimitiveType((Type::PrimitiveID)ID);
|
||||
if (T) return T;
|
||||
if (ID < Type::NumPrimitiveIDs) {
|
||||
const Type *T = Type::getPrimitiveType((Type::PrimitiveID)ID);
|
||||
if (T) return T;
|
||||
}
|
||||
|
||||
//cerr << "Looking up Type ID: " << ID << "\n";
|
||||
|
||||
const Value *D = getValue(Type::TypeTy, ID, false);
|
||||
if (D == 0) return 0;
|
||||
|
||||
return cast<Type>(D);
|
||||
const Value *V = getValue(Type::TypeTy, ID, false);
|
||||
return cast_or_null<Type>(V);
|
||||
}
|
||||
|
||||
int BytecodeParser::insertValue(Value *Val, std::vector<ValueList> &ValueTab) {
|
||||
@ -82,8 +81,10 @@ Value *BytecodeParser::getValue(const Type *Ty, unsigned oNum, bool Create) {
|
||||
|
||||
if (type == Type::TypeTyID) { // The 'type' plane has implicit values
|
||||
assert(Create == false);
|
||||
const Type *T = Type::getPrimitiveType((Type::PrimitiveID)Num);
|
||||
if (T) return (Value*)T; // Asked for a primitive type...
|
||||
if (Num < Type::NumPrimitiveIDs) {
|
||||
const Type *T = Type::getPrimitiveType((Type::PrimitiveID)Num);
|
||||
if (T) return (Value*)T; // Asked for a primitive type...
|
||||
}
|
||||
|
||||
// Otherwise, derived types need offset...
|
||||
Num -= FirstDerivedTyID;
|
||||
@ -452,7 +453,7 @@ bool BytecodeParser::ParseModuleGlobalInfo(const uchar *&Buf, const uchar *End,
|
||||
Error = "Function not ptr to func type! Ty = " + Ty->getDescription();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// We create methods by passing the underlying FunctionType to create...
|
||||
Ty = cast<PointerType>(Ty)->getElementType();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user