glsl: Fix regression in function out-parameter lvalue detection.
authorEric Anholt <eric@anholt.net>
Tue, 24 Apr 2012 00:24:13 +0000 (17:24 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 4 May 2012 21:00:32 +0000 (14:00 -0700)
When doing the var->assigned change in
f2475ca424f7e001be50f64dafa5700f6603d684, I overzealously indented the
second block of code into the "if (var)" test.  Revert these blocks to
the way they were before, just taking advantage of "var" to avoid
re-calling variable_referenced().

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=49066

src/glsl/ast_function.cpp

index 8bf0ba2a8767b41536539b3563bf76440230d2ad..58cf6854b85c3b086aa39591fc1a3994f927e936 100644 (file)
@@ -153,21 +153,21 @@ verify_parameter_modes(_mesa_glsl_parse_state *state,
         }
 
         ir_variable *var = actual->variable_referenced();
-        if (var) {
-           if (var->read_only) {
-              _mesa_glsl_error(&loc, state,
-                               "function parameter '%s %s' references the "
-                               "read-only variable '%s'",
-                               mode, formal->name,
-                               actual->variable_referenced()->name);
-              return false;
-           } else if (!actual->is_lvalue()) {
-              _mesa_glsl_error(&loc, state,
-                               "function parameter '%s %s' is not an lvalue",
-                               mode, formal->name);
-              return false;
-           }
+        if (var)
            var->assigned = true;
+
+        if (var && var->read_only) {
+           _mesa_glsl_error(&loc, state,
+                            "function parameter '%s %s' references the "
+                            "read-only variable '%s'",
+                            mode, formal->name,
+                            actual->variable_referenced()->name);
+           return false;
+        } else if (!actual->is_lvalue()) {
+           _mesa_glsl_error(&loc, state,
+                            "function parameter '%s %s' is not an lvalue",
+                            mode, formal->name);
+           return false;
         }
       }