HLSL Non-Functional: Move to more robust capturing of postDecls into a qualifier.

This will prevent a possible future defect of thinking the type can be changed,
where there is a code path today that would drop that change.
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index c45cd8b..7d2f0af 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -305,7 +305,7 @@
         TFunction& function = *new TFunction(idToken.string, type);
         if (acceptFunctionParameters(function)) {
             // post_decls
-            acceptPostDecls(function.getWritableType());
+            acceptPostDecls(function.getWritableType().getQualifier());
 
             // compound_statement (function body definition) or just a prototype?
             if (peekTokenClass(EHTokLeftBrace)) {
@@ -333,7 +333,7 @@
             }
 
             // post_decls
-            acceptPostDecls(type);
+            acceptPostDecls(type.getQualifier());
 
             // EQUAL assignment_expression
             TIntermTyped* expressionNode = nullptr;
@@ -1314,7 +1314,9 @@
     }
 
     // post_decls
-    acceptPostDecls(type);
+    TQualifier postDeclQualifier;
+    postDeclQualifier.clear();
+    acceptPostDecls(postDeclQualifier);
 
     // LEFT_BRACE
     if (! acceptTokenClass(EHTokLeftBrace)) {
@@ -1339,9 +1341,8 @@
     if (storageQualifier == EvqTemporary)
         new(&type) TType(typeList, structName);
     else {
-        TQualifier qualifier = type.getQualifier();
-        qualifier.storage = storageQualifier;
-        new(&type) TType(typeList, structName, qualifier); // sets EbtBlock
+        postDeclQualifier.storage = storageQualifier;
+        new(&type) TType(typeList, structName, postDeclQualifier); // sets EbtBlock
     }
 
     // If it was named, which means the type can be reused later, add
@@ -1407,7 +1408,7 @@
             if (arraySizes)
                 typeList->back().type->newArraySizes(*arraySizes);
 
-            acceptPostDecls(*member.type);
+            acceptPostDecls(member.type->getQualifier());
 
             // success on seeing the SEMICOLON coming up
             if (peekTokenClass(EHTokSemicolon))
@@ -1484,7 +1485,7 @@
         type->newArraySizes(*arraySizes);
 
     // post_decls
-    acceptPostDecls(*type);
+    acceptPostDecls(type->getQualifier());
 
     parseContext.paramFix(*type);
 
@@ -2595,7 +2596,7 @@
 //        COLON REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt RIGHT_PAREN // optional
 //        annotations                                                               // optional
 //
-void HlslGrammar::acceptPostDecls(TType& type)
+void HlslGrammar::acceptPostDecls(TQualifier& qualifier)
 {
     do {
         // COLON 
@@ -2623,7 +2624,7 @@
                     expected(")");
                     break;
                 }
-                parseContext.handlePackOffset(locationToken.loc, type, *locationToken.string, componentToken.string);
+                parseContext.handlePackOffset(locationToken.loc, qualifier, *locationToken.string, componentToken.string);
             } else if (! acceptIdentifier(idToken)) {
                 expected("semantic or packoffset or register");
                 return;
@@ -2666,10 +2667,10 @@
                     expected(")");
                     break;
                 }
-                parseContext.handleRegister(registerDesc.loc, type, profile.string, *registerDesc.string, subComponent);
+                parseContext.handleRegister(registerDesc.loc, qualifier, profile.string, *registerDesc.string, subComponent);
             } else {
                 // semantic, in idToken.string
-                parseContext.handleSemantic(idToken.loc, type, *idToken.string);
+                parseContext.handleSemantic(idToken.loc, qualifier, *idToken.string);
             }
         } else if (acceptTokenClass(EHTokLeftAngle)) {
             // TODO: process annotations, just accepting them for now