[TableGen] Add asserts to make sure default values match property type

This adds a few asserts to the property TableGen backend to prevent
mismatches between property types and their default values. This
would've prevented a copy-paste mistake we discovered downstream.
This commit is contained in:
Jonas Devlieghere 2019-10-25 10:17:09 -07:00
parent de79836312
commit 5934cd11ea
2 changed files with 18 additions and 0 deletions

View File

@ -18,11 +18,13 @@ class Global {
class DefaultTrue {
int DefaultUnsignedValue = 1;
bit HasDefaultUnsignedValue = 1;
bit HasDefaultBooleanValue = 1;
}
class DefaultFalse {
int DefaultUnsignedValue = 0;
bit HasDefaultUnsignedValue = 1;
bit HasDefaultBooleanValue = 1;
}
// Gives the property a default string value.

View File

@ -46,6 +46,7 @@ static void emitProperty(Record *Property, raw_ostream &OS) {
bool hasDefaultUnsignedValue = Property->getValue("HasDefaultUnsignedValue");
bool hasDefaultEnumValue = Property->getValue("HasDefaultEnumValue");
bool hasDefaultStringValue = Property->getValue("HasDefaultStringValue");
bool hasDefaultBooleanValue = Property->getValue("HasDefaultBooleanValue");
// Guarantee that every property has a default value.
assert((hasDefaultUnsignedValue || hasDefaultEnumValue ||
@ -57,6 +58,21 @@ static void emitProperty(Record *Property, raw_ostream &OS) {
assert(!(hasDefaultUnsignedValue && hasDefaultEnumValue) &&
"Property cannot have both a unsigned and enum default value.");
// Guarantee that every boolean property has a boolean default value.
assert(!(Property->getValueAsString("Type") == "Boolean" &&
!hasDefaultBooleanValue) &&
"Boolean property must have a boolean default value.");
// Guarantee that every string property has a string default value.
assert(!(Property->getValueAsString("Type") == "String" &&
!hasDefaultStringValue) &&
"String property must have a string default value.");
// Guarantee that every enum property has an enum default value.
assert(
!(Property->getValueAsString("Type") == "Enum" && !hasDefaultEnumValue) &&
"Enum property must have a enum default value.");
// Emit the default uint value.
if (hasDefaultUnsignedValue) {
OS << std::to_string(Property->getValueAsInt("DefaultUnsignedValue"));