diff options
author | Chris Lattner <sabre@nondot.org> | 2003-07-29 23:00:08 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-07-29 23:00:08 +0000 |
commit | 30709543d2463948d2b6e30a4411a29940cfde69 (patch) | |
tree | 10f7b1a546b89586f507066c3a39f5d50b25f335 /utils/TableGen | |
parent | 92aa8ca9c5e749a010c33baff633343a48dcfec1 (diff) | |
download | external_llvm-30709543d2463948d2b6e30a4411a29940cfde69.zip external_llvm-30709543d2463948d2b6e30a4411a29940cfde69.tar.gz external_llvm-30709543d2463948d2b6e30a4411a29940cfde69.tar.bz2 |
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
Diffstat (limited to 'utils/TableGen')
-rw-r--r-- | utils/TableGen/CodeEmitterGen.cpp | 9 | ||||
-rw-r--r-- | utils/TableGen/CodeEmitterGen.h | 2 | ||||
-rw-r--r-- | utils/TableGen/TableGen.cpp | 6 |
3 files changed, 12 insertions, 5 deletions
diff --git a/utils/TableGen/CodeEmitterGen.cpp b/utils/TableGen/CodeEmitterGen.cpp index 90497cc..8805c7c 100644 --- a/utils/TableGen/CodeEmitterGen.cpp +++ b/utils/TableGen/CodeEmitterGen.cpp @@ -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; } diff --git a/utils/TableGen/CodeEmitterGen.h b/utils/TableGen/CodeEmitterGen.h index 098816a..cf000c4 100644 --- a/utils/TableGen/CodeEmitterGen.h +++ b/utils/TableGen/CodeEmitterGen.h @@ -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); }; diff --git a/utils/TableGen/TableGen.cpp b/utils/TableGen/TableGen.cpp index 81529f0..17f2b2e 100644 --- a/utils/TableGen/TableGen.cpp +++ b/utils/TableGen/TableGen.cpp @@ -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; } |