fix the wrong generated code when a non-constant array is declared with its size derived from spec constant operations
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 81486ca..63c3d40 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -66,6 +66,25 @@
 // or a different instruction sequence to do something gets used).
 const int GeneratorVersion = 1;
 
+namespace {
+class SpecConstantOpModeGuard {
+public:
+    SpecConstantOpModeGuard(spv::Builder* builder)
+        : builder_(builder) {
+        previous_flag_ = builder->isInSpecConstCodeGenMode();
+        builder->setToSpecConstCodeGenMode();
+    }
+    ~SpecConstantOpModeGuard() {
+        previous_flag_ ? builder_->setToSpecConstCodeGenMode()
+                       : builder_->setToNormalCodeGenMode();
+    }
+
+private:
+    spv::Builder* builder_;
+    bool previous_flag_;
+};
+}
+
 //
 // The main holder of information for translating glslang to SPIR-V.
 //
@@ -1927,6 +1946,7 @@
     glslang::TIntermTyped* specNode = arraySizes.getDimNode(dim);
     if (specNode != nullptr) {
         builder.clearAccessChain();
+        SpecConstantOpModeGuard set_to_spec_const_mode(&builder);
         specNode->traverse(this);
         return accessChainLoad(specNode->getAsTyped()->getType());
     }
@@ -3868,25 +3888,6 @@
     return builder.makeCompositeConstant(typeId, spvConsts);
 }
 
-namespace {
-class SpecConstantOpModeGuard {
-public:
-    SpecConstantOpModeGuard(spv::Builder* builder)
-        : builder_(builder) {
-        previous_flag_ = builder->isInSpecConstCodeGenMode();
-        builder->setToSpecConstCodeGenMode();
-    }
-    ~SpecConstantOpModeGuard() {
-        previous_flag_ ? builder_->setToSpecConstCodeGenMode()
-                       : builder_->setToNormalCodeGenMode();
-    }
-
-private:
-    spv::Builder* builder_;
-    bool previous_flag_;
-};
-}
-
 // Create constant ID from const initializer sub tree.
 spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstSubTree(
     glslang::TIntermTyped* subTree)