diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 7d0d3abdca2eb5d76f80c8a9115ce0a949242c21..5e43286975cc458ca3eccb3435d55db514766440 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -599,9 +599,11 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
             builder.setAccessChainLValue(id);
     } else {
         // finish off the entry-point SPV instruction by adding the Input/Output <id>
-        spv::StorageClass sc = builder.getStorageClass(id);
-        if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)
-            entryPoint->addIdOperand(id);
+        if (builder.isPointer(id)) {
+            spv::StorageClass sc = builder.getStorageClass(id);
+            if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)
+                entryPoint->addIdOperand(id);
+        }
     }
 }
 
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 6736a13c6356889453fca50360b64a02ed7b342d..92911854f217dcf6a10df87ae66449dd3816d7fa 100755
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -293,7 +293,12 @@ public:
 
     Instruction* getInstruction(Id id) const { return idToInstruction[id]; }
     spv::Id getTypeId(Id resultId) const { return idToInstruction[resultId]->getTypeId(); }
-    StorageClass getStorageClass(Id typeId) const { return (StorageClass)idToInstruction[typeId]->getImmediateOperand(0); }
+    StorageClass getStorageClass(Id typeId) const
+    {
+        assert(idToInstruction[typeId]->getOpCode() == spv::OpTypePointer);
+        return (StorageClass)idToInstruction[typeId]->getImmediateOperand(0);
+    }
+
     void dump(std::vector<unsigned int>& out) const
     {
         for (int f = 0; f < (int)functions.size(); ++f)
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
new file mode 100644
index 0000000000000000000000000000000000000000..04aff3684fdbcf20c721dba891bf39fc83f09d4d
--- /dev/null
+++ b/Test/baseResults/spv.bool.vert.out
@@ -0,0 +1,98 @@
+spv.bool.vert
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+
+Linked vertex stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 49
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 23 47 48
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 10  "foo(b1;"
+                              Name 9  "b"
+                              Name 21  "gl_PerVertex"
+                              MemberName 21(gl_PerVertex) 0  "gl_Position"
+                              MemberName 21(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 21(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 21(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 23  ""
+                              Name 28  "ubname"
+                              MemberName 28(ubname) 0  "b"
+                              Name 30  "ubinst"
+                              Name 31  "param"
+                              Name 47  "gl_VertexID"
+                              Name 48  "gl_InstanceID"
+                              MemberDecorate 21(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 21(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 21(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 21(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 21(gl_PerVertex) Block
+                              Decorate 28(ubname) GLSLShared
+                              Decorate 28(ubname) Block
+                              Decorate 47(gl_VertexID) BuiltIn VertexId
+                              Decorate 48(gl_InstanceID) BuiltIn InstanceId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeBool
+               7:             TypePointer Function 6(bool)
+               8:             TypeFunction 6(bool) 7(ptr)
+              13:     6(bool) ConstantFalse
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+              18:             TypeInt 32 0
+              19:     18(int) Constant 1
+              20:             TypeArray 16(float) 19
+21(gl_PerVertex):             TypeStruct 17(fvec4) 16(float) 20 20
+              22:             TypePointer Output 21(gl_PerVertex)
+              23:     22(ptr) Variable Output
+              24:             TypeInt 32 1
+              25:     24(int) Constant 0
+              26:             TypePointer Function 17(fvec4)
+      28(ubname):             TypeStruct 6(bool)
+              29:             TypePointer Uniform 28(ubname)
+      30(ubinst):     29(ptr) Variable Uniform
+              32:             TypePointer Uniform 6(bool)
+              38:   16(float) Constant 0
+              39:   17(fvec4) ConstantComposite 38 38 38 38
+              41:   16(float) Constant 1065353216
+              42:   17(fvec4) ConstantComposite 41 41 41 41
+              44:             TypePointer Output 17(fvec4)
+              46:             TypePointer Input 24(int)
+ 47(gl_VertexID):     46(ptr) Variable Input
+48(gl_InstanceID):     46(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              27:     26(ptr) Variable Function
+       31(param):      7(ptr) Variable Function
+              33:     32(ptr) AccessChain 30(ubinst) 25
+              34:     6(bool) Load 33
+                              Store 31(param) 34
+              35:     6(bool) FunctionCall 10(foo(b1;) 31(param)
+                              SelectionMerge 37 None
+                              BranchConditional 35 36 40
+              36:               Label
+                                Store 27 39
+                                Branch 37
+              40:               Label
+                                Store 27 42
+                                Branch 37
+              37:             Label
+              43:   17(fvec4) Load 27
+              45:     44(ptr) AccessChain 23 25
+                              Store 45 43
+                              Return
+                              FunctionEnd
+     10(foo(b1;):     6(bool) Function None 8
+            9(b):      7(ptr) FunctionParameter
+              11:             Label
+              12:     6(bool) Load 9(b)
+              14:     6(bool) INotEqual 12 13
+                              ReturnValue 14
+                              FunctionEnd
diff --git a/Test/spv.bool.vert b/Test/spv.bool.vert
new file mode 100644
index 0000000000000000000000000000000000000000..f58bc55d5b2d0904a4e6dd0cdad173e1aec3b916
--- /dev/null
+++ b/Test/spv.bool.vert
@@ -0,0 +1,17 @@
+#version 450
+
+const bool condition = false;
+
+uniform ubname {
+    bool b;
+} ubinst;
+
+bool foo(bool b)
+{
+	return b != condition;
+}
+
+void main()
+{
+    gl_Position = foo(ubinst.b) ? vec4(0.0) : vec4(1.0);
+}
diff --git a/Test/test-spirv-list b/Test/test-spirv-list
index 136a9a67e66c6cb111ec2942a9ad066e8d5aa19c..ea3094b97ce1527488899944e4ada9d3fe28a75e 100644
--- a/Test/test-spirv-list
+++ b/Test/test-spirv-list
@@ -30,6 +30,7 @@ spv.accessChain.frag
 spv.aggOps.frag
 spv.always-discard.frag
 spv.always-discard2.frag
+spv.bool.vert
 spv.conditionalDiscard.frag
 spv.conversion.frag
 spv.dataOut.frag
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index a21eb50edec5c397a6953b1f9213ce132ecc8602..b14834f8923502eee6e52f1edbe9bff6ea581030 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 "SPIRV99.830"
+#define GLSLANG_REVISION "SPIRV99.831"
 #define GLSLANG_DATE "08-Dec-2015"