diff --git a/Test/330.frag b/Test/330.frag
index 3fad83b829776486e1e88e734b65a1984952b0b3..d6083c0622648f3ddfbe7be684810103aada9ee6 100644
--- a/Test/330.frag
+++ b/Test/330.frag
@@ -44,6 +44,8 @@ const int start = 6;
 layout(location = -2) in vec4 v1;         // ERROR
 layout(location = start + 2) in vec4 v2;  // ERROR
 layout(location = 4.7e10) in vec4 v20;    // ERROR
+layout(location = +60) in float v21;      // ERROR
+layout(location = (2)) in float v22;      // ERROR
 
 struct S {
     float f1;
@@ -66,6 +68,8 @@ layout(location = start) in vec4 v3;
 layout(location = -2) in vec4 v4;         // ERROR
 layout(location = -start) in vec4 v5;     // ERROR
 layout(location = start*start - 2 - 4) in vec4 v6;
+layout(location = +61) in float v23;
+layout(location = (62)) in float v24;
 
 struct S2 {
     float f1;
diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out
index aebb3cdeb816ea28cb454ac3bc102c762e656b26..9775500a521c18326b07b6d6387ea8aa0d887540 100644
--- a/Test/baseResults/330.frag.out
+++ b/Test/baseResults/330.frag.out
@@ -10,22 +10,24 @@ ERROR: 0:44: 'layout-id value' : cannot be negative
 ERROR: 0:45: 'non-literal layout-id value' : not supported for this version or the enabled extensions 
 ERROR: 0:46: 'layout-id value' : scalar integer expression required 
 ERROR: 0:46: 'location' : location is too large 
-ERROR: 0:50: 'f2' : cannot use layout qualifiers on structure members 
-ERROR: 0:55: 'location on block member' : not supported for this version or the enabled extensions 
-ERROR: 0:60: 'location on block member' : can only use in an in/out block 
+ERROR: 0:47: 'non-literal layout-id value' : not supported for this version or the enabled extensions 
+ERROR: 0:48: 'non-literal layout-id value' : not supported for this version or the enabled extensions 
+ERROR: 0:52: 'f2' : cannot use layout qualifiers on structure members 
+ERROR: 0:57: 'location on block member' : not supported for this version or the enabled extensions 
+ERROR: 0:62: 'location on block member' : can only use in an in/out block 
+ERROR: 0:62: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
 ERROR: 0:60: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
-ERROR: 0:58: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
-ERROR: 0:66: 'layout-id value' : cannot be negative 
-ERROR: 0:67: 'layout-id value' : cannot be negative 
-ERROR: 0:72: 'f2' : cannot use layout qualifiers on structure members 
-ERROR: 0:87: 'location on block member' : can only use in an in/out block 
-ERROR: 0:87: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
-ERROR: 0:87: 'location' : overlapping use of location 3
-ERROR: 0:85: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
-ERROR: 0:90: 'location' : either the block needs a location, or all members need a location, or no members have a location 
-ERROR: 0:104: 'A' : cannot use layout qualifiers on structure members 
-ERROR: 0:115: 'location' : overlapping use of location 44
-ERROR: 25 compilation errors.  No code generated.
+ERROR: 0:68: 'layout-id value' : cannot be negative 
+ERROR: 0:69: 'layout-id value' : cannot be negative 
+ERROR: 0:76: 'f2' : cannot use layout qualifiers on structure members 
+ERROR: 0:91: 'location on block member' : can only use in an in/out block 
+ERROR: 0:91: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 0:91: 'location' : overlapping use of location 3
+ERROR: 0:89: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 0:94: 'location' : either the block needs a location, or all members need a location, or no members have a location 
+ERROR: 0:108: 'A' : cannot use layout qualifiers on structure members 
+ERROR: 0:119: 'location' : overlapping use of location 44
+ERROR: 27 compilation errors.  No code generated.
 
 
 ERROR: node is still EOpNull!
@@ -70,12 +72,16 @@ ERROR: node is still EOpNull!
 0:?     'v1' (smooth in 4-component vector of float)
 0:?     'v2' (layout(location=8 ) smooth in 4-component vector of float)
 0:?     'v20' (smooth in 4-component vector of float)
+0:?     'v21' (layout(location=60 ) smooth in float)
+0:?     'v22' (layout(location=2 ) smooth in float)
 0:?     '__anon__1' (in block{layout(location=1 component=0 ) in float f1, layout(location=3 ) in float f2})
 0:?     'uinst' (layout(location=1 column_major shared ) uniform block{layout(column_major shared ) uniform float f1, layout(location=3 column_major shared ) uniform float f2})
 0:?     'v3' (layout(location=6 ) smooth in 4-component vector of float)
 0:?     'v4' (smooth in 4-component vector of float)
 0:?     'v5' (smooth in 4-component vector of float)
 0:?     'v6' (layout(location=30 ) smooth in 4-component vector of float)
+0:?     'v23' (layout(location=61 ) smooth in float)
+0:?     'v24' (layout(location=62 ) smooth in float)
 0:?     'ininst2' (in block{layout(location=28 component=0 ) in bool b1, layout(location=29 component=0 ) in float f1, layout(location=25 ) in float f2, layout(location=26 component=0 ) in 4-component vector of float f3, layout(location=21 ) in structure{float f1, float f2} s2, layout(location=23 component=0 ) in 4-component vector of float f4, layout(location=24 component=0 ) in 4-component vector of float f5})
 0:?     'uinst2' (layout(location=13 column_major shared ) uniform block{layout(column_major shared ) uniform float f1, layout(location=3 column_major shared ) uniform float f2})
 0:?     'in3' (in block{in float f1, layout(location=40 ) in float f2})
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index e65dd92d2002b9cc41305aa5db6f468c8d8f3238..51a9144e1292dda5f445f02ef91549d5425faabc 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -502,6 +502,7 @@ public:
     virtual TIntermTyped* fold(TOperator, const TIntermTyped*) const;
     virtual TIntermTyped* fold(TOperator, const TType&) const;
     void setLiteral() { literal = true; }
+    void setExpression() { literal = false; }
     bool isLiteral() const { return literal; }
 protected:
     const TConstUnionArray unionArray;
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 0a79435d2accac59c20c27043d03e58913e781bb..3d25628c3d807362e65a8087b38afbf9d398ee2d 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -9,5 +9,5 @@
 // source have to figure out how to create revision.h just to get a build
 // going.  However, if it is not updated, it can be a version behind.
 
-#define GLSLANG_REVISION "25408"
-#define GLSLANG_DATE     "2014/02/18 18:00:58"
+#define GLSLANG_REVISION "25411"
+#define GLSLANG_DATE     "2014/02/18 19:47:20"
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index d90b5a7068c8b6d9a68e51c9928d23158c3891cf..9d3b9b81016efe28d76767a181fe288c374cc450 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -4096,7 +4096,7 @@ void TParseContext::fixBlockXfbOffsets(TSourceLoc loc, TQualifier& qualifier, TT
 {
     // "If a block is qualified with xfb_offset, all its 
     // members are assigned transform feedback buffer offsets. If a block is not qualified with xfb_offset, any 
-    // members of that block not qualified with an xfb_offsetwill not be assigned transform feedback buffer 
+    // members of that block not qualified with an xfb_offset will not be assigned transform feedback buffer 
     // offsets."
 
     if (! qualifier.hasXfbBuffer() || ! qualifier.hasXfbOffset())
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 6b36fa4f7c01d19e99c9626f11fb395eb01fd46a..ba5ceddc8d6717a9debc1a547455f7038430403e 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -253,7 +253,9 @@ primary_expression
         $$ = parseContext.intermediate.addConstantUnion(unionArray, TType(EbtBool, EvqConst), $1.loc, true);
     }
     | LEFT_PAREN expression RIGHT_PAREN {
-        $$ = $2;
+        $$ = $2;        
+        if ($$->getAsConstantUnion())
+            $$->getAsConstantUnion()->setExpression();
     }
     ;
 
@@ -430,8 +432,11 @@ unary_expression
                 parseContext.unaryOpError($1.loc, errorOp, $2->getCompleteString());
                 $$ = $2;
             }
-        } else
+        } else {
             $$ = $2;
+            if ($$->getAsConstantUnion())
+                $$->getAsConstantUnion()->setExpression();
+        }
     }
     ;
 // Grammar Note:  No traditional style type casts.