diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
index 775549f132f0c46abd5a2e9b1ea6e841e63bcfb7..a26b81927dd0092db220795d719656e20cc64a4a 100755
--- a/Test/baseResults/hlsl.shapeConv.frag.out
+++ b/Test/baseResults/hlsl.shapeConv.frag.out
@@ -108,8 +108,14 @@ gl_FragCoord origin is upper left
 0:29      Construct vec3 ( temp 3-component vector of float)
 0:29        Construct float ( temp float)
 0:29          'f1' ( temp 1-component vector of float)
-0:31      Branch: Return with expression
-0:31        'input' ( in 4-component vector of float)
+0:33      Branch: Return with expression
+0:33        component-wise multiply ( temp 4-component vector of float)
+0:33          'input' ( in 4-component vector of float)
+0:33          Constant:
+0:33            3.000000
+0:33            3.000000
+0:33            3.000000
+0:33            3.000000
 0:?   Linker Objects
 
 
@@ -226,13 +232,19 @@ gl_FragCoord origin is upper left
 0:29      Construct vec3 ( temp 3-component vector of float)
 0:29        Construct float ( temp float)
 0:29          'f1' ( temp 1-component vector of float)
-0:31      Branch: Return with expression
-0:31        'input' ( in 4-component vector of float)
+0:33      Branch: Return with expression
+0:33        component-wise multiply ( temp 4-component vector of float)
+0:33          'input' ( in 4-component vector of float)
+0:33          Constant:
+0:33            3.000000
+0:33            3.000000
+0:33            3.000000
+0:33            3.000000
 0:?   Linker Objects
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 85
+// Id's are bound by 88
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -282,6 +294,8 @@ gl_FragCoord origin is upper left
               56:             TypeInt 32 0
               57:     56(int) Constant 0
               62:             TypeVector 41(bool) 4
+              83:    6(float) Constant 1077936128
+              84:    7(fvec4) ConstantComposite 83 83 83 83
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -343,5 +357,6 @@ gl_FragCoord origin is upper left
               80:    6(float) Load 70(f1)
               81:   22(fvec3) CompositeConstruct 80 80 80
               82:    7(fvec4) Load 11(input)
-                              ReturnValue 82
+              85:    7(fvec4) FMul 82 84
+                              ReturnValue 85
                               FunctionEnd
diff --git a/Test/hlsl.shapeConv.frag b/Test/hlsl.shapeConv.frag
index adb170eab35d4740791693048ab28a8be489f139..16a20457427b4774462a8e071e1ee54a55415868 100644
--- a/Test/hlsl.shapeConv.frag
+++ b/Test/hlsl.shapeConv.frag
@@ -28,5 +28,7 @@ float4 PixelShaderFunction(float4 input, float f) : COLOR0
     f1.x;
     f1.xxx;
 
-    return input;
+    const float4 f4 = 3.0;
+
+    return input * f4;
 }
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 73ac8a611333e07b41776ee02228f95dd5ba6744..5c9566b81b768f3d1dcec3c55bf18b03b2399d66 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -2,5 +2,5 @@
 // For the version, it uses the latest git tag followed by the number of commits.
 // For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "Overload400-PrecQual.1995"
+#define GLSLANG_REVISION "Overload400-PrecQual.1996"
 #define GLSLANG_DATE "12-Apr-2017"
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index a92ecdf6170c740c9f45d592dbd155df00e10c8e..a2a490ca7a06d667b57c146b7967ed87eafa6b7a 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -6438,7 +6438,10 @@ TIntermNode* HlslParseContext::executeInitializer(const TSourceLoc& loc, TInterm
         // Compile-time tagging of the variable with its constant value...
 
         initializer = intermediate.addConversion(EOpAssign, variable->getType(), initializer);
-        if (! initializer || ! initializer->getAsConstantUnion() || variable->getType() != initializer->getType()) {
+        if (initializer != nullptr && variable->getType() != initializer->getType())
+            initializer = intermediate.addShapeConversion(EOpAssign, variable->getType(), initializer);
+        if (initializer == nullptr || !initializer->getAsConstantUnion() ||
+                                      variable->getType() != initializer->getType()) {
             error(loc, "non-matching or non-convertible constant type for const initializer",
                 variable->getType().getStorageQualifierString(), "");
             variable->getWritableType().getQualifier().storage = EvqTemporary;