Don't crash if there is no Inst class in the tablegen file!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7402 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-07-29 23:00:08 +00:00
parent 92aa8ca9c5
commit 30709543d2
6 changed files with 24 additions and 10 deletions

View File

@ -2,7 +2,7 @@
#include "Record.h"
#include "CodeEmitterGen.h"
void CodeEmitterGen::createEmitter(std::ostream &o) {
int CodeEmitterGen::createEmitter(std::ostream &o) {
std::vector<Record*> Insts;
const std::map<std::string, Record*> &Defs = Records.getDefs();
@ -31,8 +31,12 @@ void CodeEmitterGen::createEmitter(std::ostream &o) {
<< " DEBUG(std::cerr << \"Emitting " << R->getName() << "\\n\");\n";
const RecordVal *InstVal = R->getValue("Inst");
Init *InitVal = InstVal->getValue();
if (!InstVal) {
std::cerr << "No 'Inst' record found in target description file!\n";
return 1;
}
Init *InitVal = InstVal->getValue();
assert(dynamic_cast<BitsInit*>(InitVal) &&
"Can only handle undefined bits<> types!");
BitsInit *BI = (BitsInit*)InitVal;
@ -225,4 +229,5 @@ void CodeEmitterGen::createEmitter(std::ostream &o) {
<< " }\n"
<< " return Value;\n"
<< "}\n";
return 0;
}

View File

@ -15,7 +15,7 @@ struct CodeEmitterGen {
public:
CodeEmitterGen(RecordKeeper &R) : Records(R) {}
void createEmitter(std::ostream &o);
int createEmitter(std::ostream &o);
void emitMachineOpEmitter(std::ostream &o, const std::string &Namespace);
void emitGetValueBit(std::ostream &o, const std::string &Namespace);
};

View File

@ -394,10 +394,12 @@ int main(int argc, char **argv) {
RemoveFileOnSignal(OutputFilename);
}
int ErrorCode = 0;
switch (Action) {
case Parse: ParseMachineCode(); break;
case GenEmitter:
CodeEmitterGen(Records).createEmitter(*Out);
ErrorCode = CodeEmitterGen(Records).createEmitter(*Out);
break;
case PrintRecords:
*Out << Records; // No argument, dump all contents
@ -421,5 +423,5 @@ int main(int argc, char **argv) {
}
if (Out != &std::cout) delete Out;
return 0;
return ErrorCode;
}

View File

@ -2,7 +2,7 @@
#include "Record.h"
#include "CodeEmitterGen.h"
void CodeEmitterGen::createEmitter(std::ostream &o) {
int CodeEmitterGen::createEmitter(std::ostream &o) {
std::vector<Record*> Insts;
const std::map<std::string, Record*> &Defs = Records.getDefs();
@ -31,8 +31,12 @@ void CodeEmitterGen::createEmitter(std::ostream &o) {
<< " DEBUG(std::cerr << \"Emitting " << R->getName() << "\\n\");\n";
const RecordVal *InstVal = R->getValue("Inst");
Init *InitVal = InstVal->getValue();
if (!InstVal) {
std::cerr << "No 'Inst' record found in target description file!\n";
return 1;
}
Init *InitVal = InstVal->getValue();
assert(dynamic_cast<BitsInit*>(InitVal) &&
"Can only handle undefined bits<> types!");
BitsInit *BI = (BitsInit*)InitVal;
@ -225,4 +229,5 @@ void CodeEmitterGen::createEmitter(std::ostream &o) {
<< " }\n"
<< " return Value;\n"
<< "}\n";
return 0;
}

View File

@ -15,7 +15,7 @@ struct CodeEmitterGen {
public:
CodeEmitterGen(RecordKeeper &R) : Records(R) {}
void createEmitter(std::ostream &o);
int createEmitter(std::ostream &o);
void emitMachineOpEmitter(std::ostream &o, const std::string &Namespace);
void emitGetValueBit(std::ostream &o, const std::string &Namespace);
};

View File

@ -394,10 +394,12 @@ int main(int argc, char **argv) {
RemoveFileOnSignal(OutputFilename);
}
int ErrorCode = 0;
switch (Action) {
case Parse: ParseMachineCode(); break;
case GenEmitter:
CodeEmitterGen(Records).createEmitter(*Out);
ErrorCode = CodeEmitterGen(Records).createEmitter(*Out);
break;
case PrintRecords:
*Out << Records; // No argument, dump all contents
@ -421,5 +423,5 @@ int main(int argc, char **argv) {
}
if (Out != &std::cout) delete Out;
return 0;
return ErrorCode;
}