Index: lib/TableGen/Record.cpp =================================================================== --- lib/TableGen/Record.cpp +++ lib/TableGen/Record.cpp @@ -1835,11 +1835,19 @@ continue; if (Init *V = Value.getValue()) { Init *VR = V->resolveReferences(R); - if (Value.setValue(VR)) - PrintFatalError(getLoc(), "Invalid value is found when setting '" + + if (Value.setValue(VR)) { + std::string Type; + if (TypedInit *VRT = dyn_cast(VR)) + Type = + (Twine("of type '") + VRT->getType()->getAsString() + "' ").str(); + PrintFatalError(getLoc(), Twine("Invalid value ") + Type + + "is found when setting '" + Value.getNameInitAsString() + + " of type '" + + Value.getType()->getAsString() + "' after resolving references: " + VR->getAsUnquotedString() + "\n"); + } } } Init *OldName = getNameInit(); @@ -1969,8 +1977,10 @@ if (IntInit *II = dyn_cast(R->getValue())) return II->getValue(); - PrintFatalError(getLoc(), "Record `" + getName() + "', field `" + - FieldName + "' does not have an int initializer!"); + PrintFatalError(getLoc(), Twine("Record `") + getName() + "', field `" + + FieldName + + "' does not have an int initializer: " + + R->getValue()->getAsString()); } std::vector @@ -1981,8 +1991,10 @@ if (IntInit *II = dyn_cast(I)) Ints.push_back(II->getValue()); else - PrintFatalError(getLoc(), "Record `" + getName() + "', field `" + - FieldName + "' does not have a list of ints initializer!"); + PrintFatalError(getLoc(), + Twine("Record `") + getName() + "', field `" + FieldName + + "' does not have a list of ints initializer: " + + I->getAsString()); } return Ints; } @@ -1995,8 +2007,10 @@ if (StringInit *SI = dyn_cast(I)) Strings.push_back(SI->getValue()); else - PrintFatalError(getLoc(), "Record `" + getName() + "', field `" + - FieldName + "' does not have a list of strings initializer!"); + PrintFatalError(getLoc(), + Twine("Record `") + getName() + "', field `" + FieldName + + "' does not have a list of strings initializer: " + + I->getAsString()); } return Strings; }