mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-24 17:06:07 +00:00
[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:
parent
de79836312
commit
5934cd11ea
@ -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.
|
||||
|
@ -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"));
|
||||
|
Loading…
x
Reference in New Issue
Block a user