TableGen: add some more helpful error messages

Summary: Change-Id: I6f3dacf675a4126134577616e259696bebdade3a

Reviewers: tra, simon_tatham, craig.topper, MartinO, arsenm

Subscribers: wdng, llvm-commits

Differential Revision: https://reviews.llvm.org/D47429

Change-Id: I614de12a4c154c6d53c090f2f3e53ad2d09942c5
llvm-svn: 333436
This commit is contained in:
Nicolai Haehnle 2018-05-29 17:12:20 +00:00
parent 5a823d8d63
commit e7ae0f48f4
1 changed files with 13 additions and 0 deletions

View File

@ -428,6 +428,13 @@ bool TGParser::addDefOne(std::unique_ptr<Record> Rec, Init *DefmName,
Rec->resolveReferences();
checkConcrete(*Rec);
if (!isa<StringInit>(Rec->getNameInit())) {
PrintError(Rec->getLoc(), Twine("record name '") +
Rec->getNameInit()->getAsString() +
"' could not be fully resolved");
return true;
}
// If ObjectBody has template arguments, it's an error.
assert(Rec->getTemplateArgs().empty() && "How'd this get template args?");
@ -2299,9 +2306,15 @@ bool TGParser::ParseTemplateArgList(Record *CurRec) {
Lex.Lex(); // eat the ','
// Read the following declarations.
SMLoc Loc = Lex.getLoc();
TemplArg = ParseDeclaration(CurRec, true/*templateargs*/);
if (!TemplArg)
return true;
if (TheRecToAddTo->isTemplateArg(TemplArg))
return Error(Loc, "template argument with the same name has already been "
"defined");
TheRecToAddTo->addTemplateArg(TemplArg);
}