diff --git a/src/libs/glsl/glslsemantic.cpp b/src/libs/glsl/glslsemantic.cpp
index 9e159a35a5cc5485bba6e3f13aeafe780301f54f..a60db59cf794bb56cd8ec4d4eb8d2a4988a34fda 100644
--- a/src/libs/glsl/glslsemantic.cpp
+++ b/src/libs/glsl/glslsemantic.cpp
@@ -259,7 +259,7 @@ bool Semantic::visit(BinaryExpressionAST *ast)
 bool Semantic::visit(UnaryExpressionAST *ast)
 {
     ExprResult expr = expression(ast->expr);
-    _expr.isConstant = expr.isConstant;
+    _expr = expr;
     return false;
 }
 
@@ -345,6 +345,10 @@ bool Semantic::visit(FunctionCallExpressionAST *ast)
                 _expr.type = candidates.first()->returnType();
             else
                 _expr.type = overloads->functions().first()->returnType();
+
+        } else {
+            // called as constructor, e.g. vec2(a, b)
+            _expr.type = id.type;
         }
     }
 
@@ -693,6 +697,7 @@ bool Semantic::visit(ArrayTypeAST *ast)
     const Type *elementType = type(ast->elementType);
     Q_UNUSED(elementType);
     ExprResult size = expression(ast->size);
+    // ### array type
     return false;
 }