Fix C++ portability, non-deterministic order of argument evaluation.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 31f7aab..10c2f92 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -2590,20 +2590,25 @@
         if (builder.isScalarType(nominalTypeId)) {
             // Conversion for bool
             spv::Id boolType = builder.makeBoolType();
-            if (nominalTypeId != boolType)
-                rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, builder.makeUintConstant(1),
-                                                                                   builder.makeUintConstant(0));
-            else if (builder.getTypeId(rvalue) != boolType)
+            if (nominalTypeId != boolType) {
+                // keep these outside arguments, for determinant order-of-evaluation
+                spv::Id one = builder.makeUintConstant(1);
+                spv::Id zero = builder.makeUintConstant(0);
+                rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
+            } else if (builder.getTypeId(rvalue) != boolType)
                 rvalue = builder.createBinOp(spv::OpINotEqual, boolType, rvalue, builder.makeUintConstant(0));
         } else if (builder.isVectorType(nominalTypeId)) {
             // Conversion for bvec
             int vecSize = builder.getNumTypeComponents(nominalTypeId);
             spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize);
-            if (nominalTypeId != bvecType)
+            if (nominalTypeId != bvecType) {
+                // keep these outside arguments, for determinant order-of-evaluation
+                spv::Id one = builder.makeUintConstant(1);
+                spv::Id zero = builder.makeUintConstant(0);
                 rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue,
-                                             makeSmearedConstant(builder.makeUintConstant(1), vecSize),
-                                             makeSmearedConstant(builder.makeUintConstant(0), vecSize));
-            else if (builder.getTypeId(rvalue) != bvecType)
+                                             makeSmearedConstant(one, vecSize),
+                                             makeSmearedConstant(zero, vecSize));
+            } else if (builder.getTypeId(rvalue) != bvecType)
                 rvalue = builder.createBinOp(spv::OpINotEqual, bvecType, rvalue,
                                              makeSmearedConstant(builder.makeUintConstant(0), vecSize));
         }
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index 4742dad..30490fe 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -52,17 +52,17 @@
               28:     27(int) Constant 0
               29:     6(bool) ConstantFalse
               30:    9(bvec2) ConstantComposite 29 29
-              31:     22(int) Constant 0
-              32:     22(int) Constant 1
-              33:   23(ivec2) ConstantComposite 31 31
-              34:   23(ivec2) ConstantComposite 32 32
+              31:     22(int) Constant 1
+              32:     22(int) Constant 0
+              33:   23(ivec2) ConstantComposite 32 32
+              34:   23(ivec2) ConstantComposite 31 31
               36:             TypePointer Uniform 23(ivec2)
               38:             TypeVector 22(int) 4
      39(Uniform):             TypeStruct 38(ivec4)
               40:             TypePointer Uniform 39(Uniform)
               41:     40(ptr) Variable Uniform
               42:             TypePointer Uniform 38(ivec4)
-              65:   38(ivec4) ConstantComposite 31 31 31 31
+              65:   38(ivec4) ConstantComposite 32 32 32 32
               72:             TypeFloat 32
               73:             TypeVector 72(float) 4
               74:             TypePointer Output 73(fvec4)
@@ -79,14 +79,14 @@
               43:     42(ptr) AccessChain 41 28
               44:   38(ivec4) Load 43
               45:     22(int) CompositeExtract 44 2
-              46:     6(bool) INotEqual 45 31
+              46:     6(bool) INotEqual 45 32
                               SelectionMerge 48 None
                               BranchConditional 46 47 48
               47:               Label
               49:     42(ptr)   AccessChain 41 28
               50:   38(ivec4)   Load 49
               51:     22(int)   CompositeExtract 50 0
-              52:     6(bool)   INotEqual 51 31
+              52:     6(bool)   INotEqual 51 32
               53:    9(bvec2)   CompositeConstruct 52 52
               54:   23(ivec2)   Select 53 34 33
               55:     36(ptr)   AccessChain 26 28
@@ -96,7 +96,7 @@
               56:     36(ptr) AccessChain 26 28
               57:   23(ivec2) Load 56
               58:     22(int) CompositeExtract 57 0
-              59:     6(bool) INotEqual 58 31
+              59:     6(bool) INotEqual 58 32
                               SelectionMerge 61 None
                               BranchConditional 59 60 61
               60:               Label
@@ -114,14 +114,14 @@
               76:     42(ptr) AccessChain 41 28
               77:   38(ivec4) Load 76
               78:     22(int) CompositeExtract 77 0
-              79:     6(bool) INotEqual 78 31
+              79:     6(bool) INotEqual 78 32
                               SelectionMerge 81 None
                               BranchConditional 79 80 81
               80:               Label
               82:     42(ptr)   AccessChain 41 28
               83:   38(ivec4)   Load 82
               84:     22(int)   CompositeExtract 83 1
-              85:     6(bool)   INotEqual 84 31
+              85:     6(bool)   INotEqual 84 32
                                 Branch 81
               81:             Label
               86:     6(bool) Phi 79 61 85 80
@@ -131,7 +131,7 @@
               91:     42(ptr) AccessChain 41 28
               92:   38(ivec4) Load 91
               93:     22(int) CompositeExtract 92 0
-              94:     6(bool) INotEqual 93 31
+              94:     6(bool) INotEqual 93 32
               95:     6(bool) LogicalNot 94
                               SelectionMerge 97 None
                               BranchConditional 95 96 97
@@ -139,7 +139,7 @@
               98:     42(ptr)   AccessChain 41 28
               99:   38(ivec4)   Load 98
              100:     22(int)   CompositeExtract 99 1
-             101:     6(bool)   INotEqual 100 31
+             101:     6(bool)   INotEqual 100 32
                                 Branch 97
               97:             Label
              102:     6(bool) Phi 94 81 101 96