TblGen diagnostic for mismatched template instantiation.
authorJim Grosbach <grosbach@apple.com>
Fri, 20 Jan 2012 20:02:39 +0000 (20:02 +0000)
committerJim Grosbach <grosbach@apple.com>
Fri, 20 Jan 2012 20:02:39 +0000 (20:02 +0000)
Providing a template argment to a non-templatized class was crashing
tblgen. Add a diagnostic.

For example,
$ cat bug.td
class A;

def B : A<0> {
}
$ llvm-tblgen bug.td
bug.td:3:11: error: template argument provided to non-template class
def B : A<0> {
          ^

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148565 91177308-0d34-0410-b5e6-96231b3b80d8

lib/TableGen/TGParser.cpp

index 81c68292f1b43d2e3e7d657bddd2bd78c45d4a11..9ed7ebbb6bd0b1fac96671e7ab533b84d44d4617 100644 (file)
@@ -1516,6 +1516,10 @@ std::vector<Init*> TGParser::ParseValueList(Record *CurRec, Record *ArgsRec,
   unsigned int ArgN = 0;
   if (ArgsRec != 0 && EltTy == 0) {
     const std::vector<Init *> &TArgs = ArgsRec->getTemplateArgs();
+    if (!TArgs.size()) {
+      TokError("template argument provided to non-template class");
+      return std::vector<Init*>();
+    }
     const RecordVal *RV = ArgsRec->getValue(TArgs[ArgN]);
     if (!RV) {
       errs() << "Cannot find template arg " << ArgN << " (" << TArgs[ArgN]