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;