Add parsing for default block storage qualifiers.
Also add in a missing layout qualifier error check.
TRAC #23083
Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods
Authored-by: Jamie Madill
diff --git a/src/compiler/ParseHelper.cpp b/src/compiler/ParseHelper.cpp
index 3f8f39d..f126c8f 100644
--- a/src/compiler/ParseHelper.cpp
+++ b/src/compiler/ParseHelper.cpp
@@ -1450,7 +1450,10 @@
defaultMatrixPacking = layoutQualifier.matrixPacking;
}
- // TODO: block storage
+ if (layoutQualifier.blockStorage != EmpUnspecified)
+ {
+ defaultBlockStorage = layoutQualifier.blockStorage;
+ }
}
TFunction *TParseContext::addConstructorFunc(TPublicType publicType)
@@ -1915,6 +1918,11 @@
blockLayoutQualifier.matrixPacking = defaultMatrixPacking;
}
+ if (blockLayoutQualifier.blockStorage == EbsUnspecified)
+ {
+ blockLayoutQualifier.blockStorage = defaultBlockStorage;
+ }
+
TSymbol* blockNameSymbol = new TInterfaceBlockName(&blockName);
if (!symbolTable.declare(*blockNameSymbol)) {
error(nameLine, "redefinition", blockName.c_str(), "interface block name");
@@ -1949,6 +1957,12 @@
recover();
}
+ if (memberLayoutQualifier.blockStorage != EbsUnspecified)
+ {
+ error(memberTypeLine.line, "invalid layout qualifier:", getBlockStorageString(memberLayoutQualifier.blockStorage), "cannot be used here");
+ recover();
+ }
+
if (memberLayoutQualifier.matrixPacking == EmpUnspecified)
{
memberLayoutQualifier.matrixPacking = blockLayoutQualifier.matrixPacking;