Don't throw exceptions in clang-tblgen by switching to PrintFatalError.

Add locations in a number of places, where they are available for free.

llvm-svn: 166691
This commit is contained in:
Joerg Sonnenberger 2012-10-25 16:37:08 +00:00
parent 356f797d66
commit 691a16b444
4 changed files with 24 additions and 18 deletions

View File

@ -18,6 +18,7 @@
#include "llvm/ADT/Optional.h" #include "llvm/ADT/Optional.h"
#include "llvm/Support/Compiler.h" #include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h" #include "llvm/Support/Debug.h"
#include "llvm/TableGen/Error.h"
#include "llvm/TableGen/Record.h" #include "llvm/TableGen/Record.h"
#include "llvm/TableGen/TableGenBackend.h" #include "llvm/TableGen/TableGenBackend.h"
#include <algorithm> #include <algorithm>
@ -394,8 +395,8 @@ void EmitClangDiagsDefs(RecordKeeper &Records, raw_ostream &OS,
if (DefInit *Group = dyn_cast<DefInit>(R.getValueInit("Group"))) { if (DefInit *Group = dyn_cast<DefInit>(R.getValueInit("Group"))) {
const Record *GroupRec = Group->getDef(); const Record *GroupRec = Group->getDef();
const std::string &GroupName = GroupRec->getValueAsString("GroupName"); const std::string &GroupName = GroupRec->getValueAsString("GroupName");
throw "Error " + R.getName() + " cannot be in a warning group [" + PrintFatalError(R.getLoc(), "Error " + R.getName() +
GroupName + "]"; " cannot be in a warning group [" + GroupName + "]");
} }
} }
@ -556,7 +557,8 @@ void EmitClangDiagGroups(RecordKeeper &Records, raw_ostream &OS) {
if (I->first.find_first_not_of("abcdefghijklmnopqrstuvwxyz" if (I->first.find_first_not_of("abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789!@#$%^*-+=:?")!=std::string::npos) "0123456789!@#$%^*-+=:?")!=std::string::npos)
throw "Invalid character in diagnostic group '" + I->first + "'"; PrintFatalError("Invalid character in diagnostic group '" +
I->first + "'");
OS.write_escaped(I->first) << "\"," OS.write_escaped(I->first) << "\","
<< std::string(MaxLen-I->first.size()+1, ' '); << std::string(MaxLen-I->first.size()+1, ' ');

View File

@ -12,6 +12,7 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/ADT/DenseSet.h" #include "llvm/ADT/DenseSet.h"
#include "llvm/TableGen/Error.h"
#include "llvm/TableGen/Record.h" #include "llvm/TableGen/Record.h"
#include "llvm/TableGen/TableGenBackend.h" #include "llvm/TableGen/TableGenBackend.h"
#include <map> #include <map>
@ -133,7 +134,8 @@ void EmitClangSACheckers(RecordKeeper &Records, raw_ostream &OS) {
DI = dyn_cast<DefInit>(R->getValueInit("ParentPackage"))) DI = dyn_cast<DefInit>(R->getValueInit("ParentPackage")))
package = DI->getDef(); package = DI->getDef();
if (!isCheckerNamed(R) && !package) if (!isCheckerNamed(R) && !package)
throw "Checker '" + R->getName() + "' is neither named, nor in a package!"; PrintFatalError(R->getLoc(), "Checker '" + R->getName() +
"' is neither named, nor in a package!");
if (isCheckerNamed(R)) { if (isCheckerNamed(R)) {
// Create a pseudo-group to hold this checker. // Create a pseudo-group to hold this checker.

View File

@ -245,7 +245,7 @@ static void ParseTypes(Record *r, std::string &s,
case 'f': case 'f':
break; break;
default: default:
throw TGError(r->getLoc(), PrintFatalError(r->getLoc(),
"Unexpected letter: " + std::string(data + len, 1)); "Unexpected letter: " + std::string(data + len, 1));
} }
TV.push_back(StringRef(data, len + 1)); TV.push_back(StringRef(data, len + 1));
@ -266,7 +266,8 @@ static char Widen(const char t) {
return 'l'; return 'l';
case 'h': case 'h':
return 'f'; return 'f';
default: throw "unhandled type in widen!"; default:
PrintFatalError("unhandled type in widen!");
} }
} }
@ -282,7 +283,8 @@ static char Narrow(const char t) {
return 'i'; return 'i';
case 'f': case 'f':
return 'h'; return 'h';
default: throw "unhandled type in narrow!"; default:
PrintFatalError("unhandled type in narrow!");
} }
} }
@ -453,7 +455,7 @@ static std::string TypeString(const char mod, StringRef typestr) {
s += quad ? "x4" : "x2"; s += quad ? "x4" : "x2";
break; break;
default: default:
throw "unhandled type!"; PrintFatalError("unhandled type!");
} }
if (mod == '2') if (mod == '2')
@ -635,7 +637,7 @@ static std::string MangleName(const std::string &name, StringRef typestr,
} }
break; break;
default: default:
throw "unhandled type!"; PrintFatalError("unhandled type!");
} }
if (ck == ClassB) if (ck == ClassB)
s += "_v"; s += "_v";
@ -773,7 +775,7 @@ static unsigned GetNumElements(StringRef typestr, bool &quad) {
case 'h': nElts = 4; break; case 'h': nElts = 4; break;
case 'f': nElts = 2; break; case 'f': nElts = 2; break;
default: default:
throw "unhandled type!"; PrintFatalError("unhandled type!");
} }
if (quad) nElts <<= 1; if (quad) nElts <<= 1;
return nElts; return nElts;
@ -1004,7 +1006,7 @@ static std::string GenOpString(OpKind op, const std::string &proto,
break; break;
} }
default: default:
throw "unknown OpKind!"; PrintFatalError("unknown OpKind!");
} }
return s; return s;
} }
@ -1049,7 +1051,7 @@ static unsigned GetNeonEnum(const std::string &proto, StringRef typestr) {
ET = NeonTypeFlags::Float32; ET = NeonTypeFlags::Float32;
break; break;
default: default:
throw "unhandled type!"; PrintFatalError("unhandled type!");
} }
NeonTypeFlags Flags(ET, usgn, quad && proto[1] != 'g'); NeonTypeFlags Flags(ET, usgn, quad && proto[1] != 'g');
return Flags.getFlags(); return Flags.getFlags();
@ -1381,7 +1383,7 @@ void NeonEmitter::emitIntrinsic(raw_ostream &OS, Record *R) {
if (R->getSuperClasses().size() >= 2) if (R->getSuperClasses().size() >= 2)
classKind = ClassMap[R->getSuperClasses()[1]]; classKind = ClassMap[R->getSuperClasses()[1]];
if (classKind == ClassNone && kind == OpNone) if (classKind == ClassNone && kind == OpNone)
throw TGError(R->getLoc(), "Builtin has no class kind"); PrintFatalError(R->getLoc(), "Builtin has no class kind");
for (unsigned ti = 0, te = TypeVec.size(); ti != te; ++ti) { for (unsigned ti = 0, te = TypeVec.size(); ti != te; ++ti) {
if (kind == OpReinterpret) { if (kind == OpReinterpret) {
@ -1423,7 +1425,7 @@ static unsigned RangeFromType(const char mod, StringRef typestr) {
case 'l': case 'l':
return (1 << (int)quad) - 1; return (1 << (int)quad) - 1;
default: default:
throw "unhandled type!"; PrintFatalError("unhandled type!");
} }
} }
@ -1456,7 +1458,7 @@ void NeonEmitter::runHeader(raw_ostream &OS) {
ParseTypes(R, Types, TypeVec); ParseTypes(R, Types, TypeVec);
if (R->getSuperClasses().size() < 2) if (R->getSuperClasses().size() < 2)
throw TGError(R->getLoc(), "Builtin has no class kind"); PrintFatalError(R->getLoc(), "Builtin has no class kind");
std::string name = R->getValueAsString("Name"); std::string name = R->getValueAsString("Name");
ClassKind ck = ClassMap[R->getSuperClasses()[1]]; ClassKind ck = ClassMap[R->getSuperClasses()[1]];
@ -1501,7 +1503,7 @@ void NeonEmitter::runHeader(raw_ostream &OS) {
ParseTypes(R, Types, TypeVec); ParseTypes(R, Types, TypeVec);
if (R->getSuperClasses().size() < 2) if (R->getSuperClasses().size() < 2)
throw TGError(R->getLoc(), "Builtin has no class kind"); PrintFatalError(R->getLoc(), "Builtin has no class kind");
int si = -1, qi = -1; int si = -1, qi = -1;
uint64_t mask = 0, qmask = 0; uint64_t mask = 0, qmask = 0;
@ -1600,7 +1602,7 @@ void NeonEmitter::runHeader(raw_ostream &OS) {
ParseTypes(R, Types, TypeVec); ParseTypes(R, Types, TypeVec);
if (R->getSuperClasses().size() < 2) if (R->getSuperClasses().size() < 2)
throw TGError(R->getLoc(), "Builtin has no class kind"); PrintFatalError(R->getLoc(), "Builtin has no class kind");
ClassKind ck = ClassMap[R->getSuperClasses()[1]]; ClassKind ck = ClassMap[R->getSuperClasses()[1]];

View File

@ -77,7 +77,7 @@ static int CompareOptionRecords(const void *Av, const void *Bv) {
B->getValueAsListOfStrings("Prefixes")) { B->getValueAsListOfStrings("Prefixes")) {
PrintError(A->getLoc(), Twine("Option is equivilent to")); PrintError(A->getLoc(), Twine("Option is equivilent to"));
PrintError(B->getLoc(), Twine("Other defined here")); PrintError(B->getLoc(), Twine("Other defined here"));
throw "Eqivilant Options found."; PrintFatalError("Equivalent Options found.");
} }
return APrec < BPrec ? -1 : 1; return APrec < BPrec ? -1 : 1;
} }