mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-17 03:16:06 +00:00
track global inits
llvm-svn: 36385
This commit is contained in:
parent
52523561d9
commit
47d131bd32
@ -243,7 +243,7 @@ bool BitcodeReader::ParseTypeSymbolTable(BitstreamReader &Stream) {
|
|||||||
switch (Stream.ReadRecord(Code, Record)) {
|
switch (Stream.ReadRecord(Code, Record)) {
|
||||||
default: // Default behavior: unknown type.
|
default: // Default behavior: unknown type.
|
||||||
break;
|
break;
|
||||||
case bitc::TST_ENTRY_CODE: // TST_ENTRY: [typeid, namelen, namechar x N]
|
case bitc::TST_CODE_ENTRY: // TST_ENTRY: [typeid, namelen, namechar x N]
|
||||||
if (ConvertToString(Record, 1, TypeName))
|
if (ConvertToString(Record, 1, TypeName))
|
||||||
return Error("Invalid TST_ENTRY record");
|
return Error("Invalid TST_ENTRY record");
|
||||||
unsigned TypeID = Record[0];
|
unsigned TypeID = Record[0];
|
||||||
@ -288,7 +288,7 @@ bool BitcodeReader::ParseValueSymbolTable(BitstreamReader &Stream) {
|
|||||||
switch (Stream.ReadRecord(Code, Record)) {
|
switch (Stream.ReadRecord(Code, Record)) {
|
||||||
default: // Default behavior: unknown type.
|
default: // Default behavior: unknown type.
|
||||||
break;
|
break;
|
||||||
case bitc::VST_ENTRY_CODE: // VST_ENTRY: [valueid, namelen, namechar x N]
|
case bitc::TST_CODE_ENTRY: // VST_ENTRY: [valueid, namelen, namechar x N]
|
||||||
if (ConvertToString(Record, 1, ValueName))
|
if (ConvertToString(Record, 1, ValueName))
|
||||||
return Error("Invalid TST_ENTRY record");
|
return Error("Invalid TST_ENTRY record");
|
||||||
unsigned ValueID = Record[0];
|
unsigned ValueID = Record[0];
|
||||||
@ -358,6 +358,8 @@ bool BitcodeReader::ParseModule(BitstreamReader &Stream,
|
|||||||
case bitc::MODULE_CODE_VERSION: // VERSION: [version#]
|
case bitc::MODULE_CODE_VERSION: // VERSION: [version#]
|
||||||
if (Record.size() < 1)
|
if (Record.size() < 1)
|
||||||
return Error("Malformed MODULE_CODE_VERSION");
|
return Error("Malformed MODULE_CODE_VERSION");
|
||||||
|
if (!GlobalInits.empty())
|
||||||
|
return Error("Malformed global initializer set");
|
||||||
// Only version #0 is supported so far.
|
// Only version #0 is supported so far.
|
||||||
if (Record[0] != 0)
|
if (Record[0] != 0)
|
||||||
return Error("Unknown bitstream version!");
|
return Error("Unknown bitstream version!");
|
||||||
@ -431,7 +433,9 @@ bool BitcodeReader::ParseModule(BitstreamReader &Stream,
|
|||||||
|
|
||||||
ValueList.push_back(NewGV);
|
ValueList.push_back(NewGV);
|
||||||
|
|
||||||
// TODO: remember initializer/global pair for later substitution.
|
// Remember which value to use for the global initializer.
|
||||||
|
if (unsigned InitID = Record[2])
|
||||||
|
GlobalInits.push_back(std::make_pair(NewGV, InitID-1));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// FUNCTION: [type, callingconv, isproto, linkage, alignment, section,
|
// FUNCTION: [type, callingconv, isproto, linkage, alignment, section,
|
||||||
|
@ -22,12 +22,14 @@
|
|||||||
namespace llvm {
|
namespace llvm {
|
||||||
class BitstreamReader;
|
class BitstreamReader;
|
||||||
class Value;
|
class Value;
|
||||||
|
class GlobalValue;
|
||||||
|
|
||||||
class BitcodeReader : public ModuleProvider {
|
class BitcodeReader : public ModuleProvider {
|
||||||
const char *ErrorString;
|
const char *ErrorString;
|
||||||
|
|
||||||
std::vector<PATypeHolder> TypeList;
|
std::vector<PATypeHolder> TypeList;
|
||||||
std::vector<Value*> ValueList;
|
std::vector<Value*> ValueList;
|
||||||
|
std::vector<std::pair<GlobalValue*, unsigned> > GlobalInits;
|
||||||
public:
|
public:
|
||||||
virtual ~BitcodeReader() {}
|
virtual ~BitcodeReader() {}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user