glsl: Assign locations for uniforms in UBOs using the std140 rules.
[profile/ivi/mesa.git] / src / glsl / ast_to_hir.cpp
1 /*
2  * Copyright © 2010 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23
24 /**
25  * \file ast_to_hir.c
26  * Convert abstract syntax to to high-level intermediate reprensentation (HIR).
27  *
28  * During the conversion to HIR, the majority of the symantic checking is
29  * preformed on the program.  This includes:
30  *
31  *    * Symbol table management
32  *    * Type checking
33  *    * Function binding
34  *
35  * The majority of this work could be done during parsing, and the parser could
36  * probably generate HIR directly.  However, this results in frequent changes
37  * to the parser code.  Since we do not assume that every system this complier
38  * is built on will have Flex and Bison installed, we have to store the code
39  * generated by these tools in our version control system.  In other parts of
40  * the system we've seen problems where a parser was changed but the generated
41  * code was not committed, merge conflicts where created because two developers
42  * had slightly different versions of Bison installed, etc.
43  *
44  * I have also noticed that running Bison generated parsers in GDB is very
45  * irritating.  When you get a segfault on '$$ = $1->foo', you can't very
46  * well 'print $1' in GDB.
47  *
48  * As a result, my preference is to put as little C code as possible in the
49  * parser (and lexer) sources.
50  */
51
52 #include "main/core.h" /* for struct gl_extensions */
53 #include "glsl_symbol_table.h"
54 #include "glsl_parser_extras.h"
55 #include "ast.h"
56 #include "glsl_types.h"
57 #include "program/hash_table.h"
58 #include "ir.h"
59
60 static void
61 detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
62                                exec_list *instructions);
63
64 void
65 _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state)
66 {
67    _mesa_glsl_initialize_variables(instructions, state);
68
69    state->symbols->language_version = state->language_version;
70
71    state->current_function = NULL;
72
73    state->toplevel_ir = instructions;
74
75    /* Section 4.2 of the GLSL 1.20 specification states:
76     * "The built-in functions are scoped in a scope outside the global scope
77     *  users declare global variables in.  That is, a shader's global scope,
78     *  available for user-defined functions and global variables, is nested
79     *  inside the scope containing the built-in functions."
80     *
81     * Since built-in functions like ftransform() access built-in variables,
82     * it follows that those must be in the outer scope as well.
83     *
84     * We push scope here to create this nesting effect...but don't pop.
85     * This way, a shader's globals are still in the symbol table for use
86     * by the linker.
87     */
88    state->symbols->push_scope();
89
90    foreach_list_typed (ast_node, ast, link, & state->translation_unit)
91       ast->hir(instructions, state);
92
93    detect_recursion_unlinked(state, instructions);
94    detect_conflicting_assignments(state, instructions);
95
96    state->toplevel_ir = NULL;
97 }
98
99
100 /**
101  * If a conversion is available, convert one operand to a different type
102  *
103  * The \c from \c ir_rvalue is converted "in place".
104  *
105  * \param to     Type that the operand it to be converted to
106  * \param from   Operand that is being converted
107  * \param state  GLSL compiler state
108  *
109  * \return
110  * If a conversion is possible (or unnecessary), \c true is returned.
111  * Otherwise \c false is returned.
112  */
113 bool
114 apply_implicit_conversion(const glsl_type *to, ir_rvalue * &from,
115                           struct _mesa_glsl_parse_state *state)
116 {
117    void *ctx = state;
118    if (to->base_type == from->type->base_type)
119       return true;
120
121    /* This conversion was added in GLSL 1.20.  If the compilation mode is
122     * GLSL 1.10, the conversion is skipped.
123     */
124    if (state->language_version < 120)
125       return false;
126
127    /* From page 27 (page 33 of the PDF) of the GLSL 1.50 spec:
128     *
129     *    "There are no implicit array or structure conversions. For
130     *    example, an array of int cannot be implicitly converted to an
131     *    array of float. There are no implicit conversions between
132     *    signed and unsigned integers."
133     */
134    /* FINISHME: The above comment is partially a lie.  There is int/uint
135     * FINISHME: conversion for immediate constants.
136     */
137    if (!to->is_float() || !from->type->is_numeric())
138       return false;
139
140    /* Convert to a floating point type with the same number of components
141     * as the original type - i.e. int to float, not int to vec4.
142     */
143    to = glsl_type::get_instance(GLSL_TYPE_FLOAT, from->type->vector_elements,
144                                 from->type->matrix_columns);
145
146    switch (from->type->base_type) {
147    case GLSL_TYPE_INT:
148       from = new(ctx) ir_expression(ir_unop_i2f, to, from, NULL);
149       break;
150    case GLSL_TYPE_UINT:
151       from = new(ctx) ir_expression(ir_unop_u2f, to, from, NULL);
152       break;
153    case GLSL_TYPE_BOOL:
154       from = new(ctx) ir_expression(ir_unop_b2f, to, from, NULL);
155       break;
156    default:
157       assert(0);
158    }
159
160    return true;
161 }
162
163
164 static const struct glsl_type *
165 arithmetic_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b,
166                        bool multiply,
167                        struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
168 {
169    const glsl_type *type_a = value_a->type;
170    const glsl_type *type_b = value_b->type;
171
172    /* From GLSL 1.50 spec, page 56:
173     *
174     *    "The arithmetic binary operators add (+), subtract (-),
175     *    multiply (*), and divide (/) operate on integer and
176     *    floating-point scalars, vectors, and matrices."
177     */
178    if (!type_a->is_numeric() || !type_b->is_numeric()) {
179       _mesa_glsl_error(loc, state,
180                        "Operands to arithmetic operators must be numeric");
181       return glsl_type::error_type;
182    }
183
184
185    /*    "If one operand is floating-point based and the other is
186     *    not, then the conversions from Section 4.1.10 "Implicit
187     *    Conversions" are applied to the non-floating-point-based operand."
188     */
189    if (!apply_implicit_conversion(type_a, value_b, state)
190        && !apply_implicit_conversion(type_b, value_a, state)) {
191       _mesa_glsl_error(loc, state,
192                        "Could not implicitly convert operands to "
193                        "arithmetic operator");
194       return glsl_type::error_type;
195    }
196    type_a = value_a->type;
197    type_b = value_b->type;
198
199    /*    "If the operands are integer types, they must both be signed or
200     *    both be unsigned."
201     *
202     * From this rule and the preceeding conversion it can be inferred that
203     * both types must be GLSL_TYPE_FLOAT, or GLSL_TYPE_UINT, or GLSL_TYPE_INT.
204     * The is_numeric check above already filtered out the case where either
205     * type is not one of these, so now the base types need only be tested for
206     * equality.
207     */
208    if (type_a->base_type != type_b->base_type) {
209       _mesa_glsl_error(loc, state,
210                        "base type mismatch for arithmetic operator");
211       return glsl_type::error_type;
212    }
213
214    /*    "All arithmetic binary operators result in the same fundamental type
215     *    (signed integer, unsigned integer, or floating-point) as the
216     *    operands they operate on, after operand type conversion. After
217     *    conversion, the following cases are valid
218     *
219     *    * The two operands are scalars. In this case the operation is
220     *      applied, resulting in a scalar."
221     */
222    if (type_a->is_scalar() && type_b->is_scalar())
223       return type_a;
224
225    /*   "* One operand is a scalar, and the other is a vector or matrix.
226     *      In this case, the scalar operation is applied independently to each
227     *      component of the vector or matrix, resulting in the same size
228     *      vector or matrix."
229     */
230    if (type_a->is_scalar()) {
231       if (!type_b->is_scalar())
232          return type_b;
233    } else if (type_b->is_scalar()) {
234       return type_a;
235    }
236
237    /* All of the combinations of <scalar, scalar>, <vector, scalar>,
238     * <scalar, vector>, <scalar, matrix>, and <matrix, scalar> have been
239     * handled.
240     */
241    assert(!type_a->is_scalar());
242    assert(!type_b->is_scalar());
243
244    /*   "* The two operands are vectors of the same size. In this case, the
245     *      operation is done component-wise resulting in the same size
246     *      vector."
247     */
248    if (type_a->is_vector() && type_b->is_vector()) {
249       if (type_a == type_b) {
250          return type_a;
251       } else {
252          _mesa_glsl_error(loc, state,
253                           "vector size mismatch for arithmetic operator");
254          return glsl_type::error_type;
255       }
256    }
257
258    /* All of the combinations of <scalar, scalar>, <vector, scalar>,
259     * <scalar, vector>, <scalar, matrix>, <matrix, scalar>, and
260     * <vector, vector> have been handled.  At least one of the operands must
261     * be matrix.  Further, since there are no integer matrix types, the base
262     * type of both operands must be float.
263     */
264    assert(type_a->is_matrix() || type_b->is_matrix());
265    assert(type_a->base_type == GLSL_TYPE_FLOAT);
266    assert(type_b->base_type == GLSL_TYPE_FLOAT);
267
268    /*   "* The operator is add (+), subtract (-), or divide (/), and the
269     *      operands are matrices with the same number of rows and the same
270     *      number of columns. In this case, the operation is done component-
271     *      wise resulting in the same size matrix."
272     *    * The operator is multiply (*), where both operands are matrices or
273     *      one operand is a vector and the other a matrix. A right vector
274     *      operand is treated as a column vector and a left vector operand as a
275     *      row vector. In all these cases, it is required that the number of
276     *      columns of the left operand is equal to the number of rows of the
277     *      right operand. Then, the multiply (*) operation does a linear
278     *      algebraic multiply, yielding an object that has the same number of
279     *      rows as the left operand and the same number of columns as the right
280     *      operand. Section 5.10 "Vector and Matrix Operations" explains in
281     *      more detail how vectors and matrices are operated on."
282     */
283    if (! multiply) {
284       if (type_a == type_b)
285          return type_a;
286    } else {
287       if (type_a->is_matrix() && type_b->is_matrix()) {
288          /* Matrix multiply.  The columns of A must match the rows of B.  Given
289           * the other previously tested constraints, this means the vector type
290           * of a row from A must be the same as the vector type of a column from
291           * B.
292           */
293          if (type_a->row_type() == type_b->column_type()) {
294             /* The resulting matrix has the number of columns of matrix B and
295              * the number of rows of matrix A.  We get the row count of A by
296              * looking at the size of a vector that makes up a column.  The
297              * transpose (size of a row) is done for B.
298              */
299             const glsl_type *const type =
300                glsl_type::get_instance(type_a->base_type,
301                                        type_a->column_type()->vector_elements,
302                                        type_b->row_type()->vector_elements);
303             assert(type != glsl_type::error_type);
304
305             return type;
306          }
307       } else if (type_a->is_matrix()) {
308          /* A is a matrix and B is a column vector.  Columns of A must match
309           * rows of B.  Given the other previously tested constraints, this
310           * means the vector type of a row from A must be the same as the
311           * vector the type of B.
312           */
313          if (type_a->row_type() == type_b) {
314             /* The resulting vector has a number of elements equal to
315              * the number of rows of matrix A. */
316             const glsl_type *const type =
317                glsl_type::get_instance(type_a->base_type,
318                                        type_a->column_type()->vector_elements,
319                                        1);
320             assert(type != glsl_type::error_type);
321
322             return type;
323          }
324       } else {
325          assert(type_b->is_matrix());
326
327          /* A is a row vector and B is a matrix.  Columns of A must match rows
328           * of B.  Given the other previously tested constraints, this means
329           * the type of A must be the same as the vector type of a column from
330           * B.
331           */
332          if (type_a == type_b->column_type()) {
333             /* The resulting vector has a number of elements equal to
334              * the number of columns of matrix B. */
335             const glsl_type *const type =
336                glsl_type::get_instance(type_a->base_type,
337                                        type_b->row_type()->vector_elements,
338                                        1);
339             assert(type != glsl_type::error_type);
340
341             return type;
342          }
343       }
344
345       _mesa_glsl_error(loc, state, "size mismatch for matrix multiplication");
346       return glsl_type::error_type;
347    }
348
349
350    /*    "All other cases are illegal."
351     */
352    _mesa_glsl_error(loc, state, "type mismatch");
353    return glsl_type::error_type;
354 }
355
356
357 static const struct glsl_type *
358 unary_arithmetic_result_type(const struct glsl_type *type,
359                              struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
360 {
361    /* From GLSL 1.50 spec, page 57:
362     *
363     *    "The arithmetic unary operators negate (-), post- and pre-increment
364     *     and decrement (-- and ++) operate on integer or floating-point
365     *     values (including vectors and matrices). All unary operators work
366     *     component-wise on their operands. These result with the same type
367     *     they operated on."
368     */
369    if (!type->is_numeric()) {
370       _mesa_glsl_error(loc, state,
371                        "Operands to arithmetic operators must be numeric");
372       return glsl_type::error_type;
373    }
374
375    return type;
376 }
377
378 /**
379  * \brief Return the result type of a bit-logic operation.
380  *
381  * If the given types to the bit-logic operator are invalid, return
382  * glsl_type::error_type.
383  *
384  * \param type_a Type of LHS of bit-logic op
385  * \param type_b Type of RHS of bit-logic op
386  */
387 static const struct glsl_type *
388 bit_logic_result_type(const struct glsl_type *type_a,
389                       const struct glsl_type *type_b,
390                       ast_operators op,
391                       struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
392 {
393     if (state->language_version < 130) {
394        _mesa_glsl_error(loc, state, "bit operations require GLSL 1.30");
395        return glsl_type::error_type;
396     }
397
398     /* From page 50 (page 56 of PDF) of GLSL 1.30 spec:
399      *
400      *     "The bitwise operators and (&), exclusive-or (^), and inclusive-or
401      *     (|). The operands must be of type signed or unsigned integers or
402      *     integer vectors."
403      */
404     if (!type_a->is_integer()) {
405        _mesa_glsl_error(loc, state, "LHS of `%s' must be an integer",
406                          ast_expression::operator_string(op));
407        return glsl_type::error_type;
408     }
409     if (!type_b->is_integer()) {
410        _mesa_glsl_error(loc, state, "RHS of `%s' must be an integer",
411                         ast_expression::operator_string(op));
412        return glsl_type::error_type;
413     }
414
415     /*     "The fundamental types of the operands (signed or unsigned) must
416      *     match,"
417      */
418     if (type_a->base_type != type_b->base_type) {
419        _mesa_glsl_error(loc, state, "operands of `%s' must have the same "
420                         "base type", ast_expression::operator_string(op));
421        return glsl_type::error_type;
422     }
423
424     /*     "The operands cannot be vectors of differing size." */
425     if (type_a->is_vector() &&
426         type_b->is_vector() &&
427         type_a->vector_elements != type_b->vector_elements) {
428        _mesa_glsl_error(loc, state, "operands of `%s' cannot be vectors of "
429                         "different sizes", ast_expression::operator_string(op));
430        return glsl_type::error_type;
431     }
432
433     /*     "If one operand is a scalar and the other a vector, the scalar is
434      *     applied component-wise to the vector, resulting in the same type as
435      *     the vector. The fundamental types of the operands [...] will be the
436      *     resulting fundamental type."
437      */
438     if (type_a->is_scalar())
439         return type_b;
440     else
441         return type_a;
442 }
443
444 static const struct glsl_type *
445 modulus_result_type(const struct glsl_type *type_a,
446                     const struct glsl_type *type_b,
447                     struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
448 {
449    if (state->language_version < 130) {
450       _mesa_glsl_error(loc, state,
451                        "operator '%%' is reserved in %s",
452                        state->version_string);
453       return glsl_type::error_type;
454    }
455
456    /* From GLSL 1.50 spec, page 56:
457     *    "The operator modulus (%) operates on signed or unsigned integers or
458     *    integer vectors. The operand types must both be signed or both be
459     *    unsigned."
460     */
461    if (!type_a->is_integer()) {
462       _mesa_glsl_error(loc, state, "LHS of operator %% must be an integer.");
463       return glsl_type::error_type;
464    }
465    if (!type_b->is_integer()) {
466       _mesa_glsl_error(loc, state, "RHS of operator %% must be an integer.");
467       return glsl_type::error_type;
468    }
469    if (type_a->base_type != type_b->base_type) {
470       _mesa_glsl_error(loc, state,
471                        "operands of %% must have the same base type");
472       return glsl_type::error_type;
473    }
474
475    /*    "The operands cannot be vectors of differing size. If one operand is
476     *    a scalar and the other vector, then the scalar is applied component-
477     *    wise to the vector, resulting in the same type as the vector. If both
478     *    are vectors of the same size, the result is computed component-wise."
479     */
480    if (type_a->is_vector()) {
481       if (!type_b->is_vector()
482           || (type_a->vector_elements == type_b->vector_elements))
483          return type_a;
484    } else
485       return type_b;
486
487    /*    "The operator modulus (%) is not defined for any other data types
488     *    (non-integer types)."
489     */
490    _mesa_glsl_error(loc, state, "type mismatch");
491    return glsl_type::error_type;
492 }
493
494
495 static const struct glsl_type *
496 relational_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b,
497                        struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
498 {
499    const glsl_type *type_a = value_a->type;
500    const glsl_type *type_b = value_b->type;
501
502    /* From GLSL 1.50 spec, page 56:
503     *    "The relational operators greater than (>), less than (<), greater
504     *    than or equal (>=), and less than or equal (<=) operate only on
505     *    scalar integer and scalar floating-point expressions."
506     */
507    if (!type_a->is_numeric()
508        || !type_b->is_numeric()
509        || !type_a->is_scalar()
510        || !type_b->is_scalar()) {
511       _mesa_glsl_error(loc, state,
512                        "Operands to relational operators must be scalar and "
513                        "numeric");
514       return glsl_type::error_type;
515    }
516
517    /*    "Either the operands' types must match, or the conversions from
518     *    Section 4.1.10 "Implicit Conversions" will be applied to the integer
519     *    operand, after which the types must match."
520     */
521    if (!apply_implicit_conversion(type_a, value_b, state)
522        && !apply_implicit_conversion(type_b, value_a, state)) {
523       _mesa_glsl_error(loc, state,
524                        "Could not implicitly convert operands to "
525                        "relational operator");
526       return glsl_type::error_type;
527    }
528    type_a = value_a->type;
529    type_b = value_b->type;
530
531    if (type_a->base_type != type_b->base_type) {
532       _mesa_glsl_error(loc, state, "base type mismatch");
533       return glsl_type::error_type;
534    }
535
536    /*    "The result is scalar Boolean."
537     */
538    return glsl_type::bool_type;
539 }
540
541 /**
542  * \brief Return the result type of a bit-shift operation.
543  *
544  * If the given types to the bit-shift operator are invalid, return
545  * glsl_type::error_type.
546  *
547  * \param type_a Type of LHS of bit-shift op
548  * \param type_b Type of RHS of bit-shift op
549  */
550 static const struct glsl_type *
551 shift_result_type(const struct glsl_type *type_a,
552                   const struct glsl_type *type_b,
553                   ast_operators op,
554                   struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
555 {
556    if (state->language_version < 130) {
557       _mesa_glsl_error(loc, state, "bit operations require GLSL 1.30");
558       return glsl_type::error_type;
559    }
560
561    /* From page 50 (page 56 of the PDF) of the GLSL 1.30 spec:
562     *
563     *     "The shift operators (<<) and (>>). For both operators, the operands
564     *     must be signed or unsigned integers or integer vectors. One operand
565     *     can be signed while the other is unsigned."
566     */
567    if (!type_a->is_integer()) {
568       _mesa_glsl_error(loc, state, "LHS of operator %s must be an integer or "
569               "integer vector", ast_expression::operator_string(op));
570      return glsl_type::error_type;
571
572    }
573    if (!type_b->is_integer()) {
574       _mesa_glsl_error(loc, state, "RHS of operator %s must be an integer or "
575               "integer vector", ast_expression::operator_string(op));
576      return glsl_type::error_type;
577    }
578
579    /*     "If the first operand is a scalar, the second operand has to be
580     *     a scalar as well."
581     */
582    if (type_a->is_scalar() && !type_b->is_scalar()) {
583       _mesa_glsl_error(loc, state, "If the first operand of %s is scalar, the "
584               "second must be scalar as well",
585               ast_expression::operator_string(op));
586      return glsl_type::error_type;
587    }
588
589    /* If both operands are vectors, check that they have same number of
590     * elements.
591     */
592    if (type_a->is_vector() &&
593       type_b->is_vector() &&
594       type_a->vector_elements != type_b->vector_elements) {
595       _mesa_glsl_error(loc, state, "Vector operands to operator %s must "
596               "have same number of elements",
597               ast_expression::operator_string(op));
598      return glsl_type::error_type;
599    }
600
601    /*     "In all cases, the resulting type will be the same type as the left
602     *     operand."
603     */
604    return type_a;
605 }
606
607 /**
608  * Validates that a value can be assigned to a location with a specified type
609  *
610  * Validates that \c rhs can be assigned to some location.  If the types are
611  * not an exact match but an automatic conversion is possible, \c rhs will be
612  * converted.
613  *
614  * \return
615  * \c NULL if \c rhs cannot be assigned to a location with type \c lhs_type.
616  * Otherwise the actual RHS to be assigned will be returned.  This may be
617  * \c rhs, or it may be \c rhs after some type conversion.
618  *
619  * \note
620  * In addition to being used for assignments, this function is used to
621  * type-check return values.
622  */
623 ir_rvalue *
624 validate_assignment(struct _mesa_glsl_parse_state *state,
625                     const glsl_type *lhs_type, ir_rvalue *rhs,
626                     bool is_initializer)
627 {
628    /* If there is already some error in the RHS, just return it.  Anything
629     * else will lead to an avalanche of error message back to the user.
630     */
631    if (rhs->type->is_error())
632       return rhs;
633
634    /* If the types are identical, the assignment can trivially proceed.
635     */
636    if (rhs->type == lhs_type)
637       return rhs;
638
639    /* If the array element types are the same and the size of the LHS is zero,
640     * the assignment is okay for initializers embedded in variable
641     * declarations.
642     *
643     * Note: Whole-array assignments are not permitted in GLSL 1.10, but this
644     * is handled by ir_dereference::is_lvalue.
645     */
646    if (is_initializer && lhs_type->is_array() && rhs->type->is_array()
647        && (lhs_type->element_type() == rhs->type->element_type())
648        && (lhs_type->array_size() == 0)) {
649       return rhs;
650    }
651
652    /* Check for implicit conversion in GLSL 1.20 */
653    if (apply_implicit_conversion(lhs_type, rhs, state)) {
654       if (rhs->type == lhs_type)
655          return rhs;
656    }
657
658    return NULL;
659 }
660
661 static void
662 mark_whole_array_access(ir_rvalue *access)
663 {
664    ir_dereference_variable *deref = access->as_dereference_variable();
665
666    if (deref && deref->var) {
667       deref->var->max_array_access = deref->type->length - 1;
668    }
669 }
670
671 ir_rvalue *
672 do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state,
673               const char *non_lvalue_description,
674               ir_rvalue *lhs, ir_rvalue *rhs, bool is_initializer,
675               YYLTYPE lhs_loc)
676 {
677    void *ctx = state;
678    bool error_emitted = (lhs->type->is_error() || rhs->type->is_error());
679
680    ir_variable *lhs_var = lhs->variable_referenced();
681    if (lhs_var)
682       lhs_var->assigned = true;
683
684    if (!error_emitted) {
685       if (non_lvalue_description != NULL) {
686          _mesa_glsl_error(&lhs_loc, state,
687                           "assignment to %s",
688                           non_lvalue_description);
689          error_emitted = true;
690       } else if (lhs->variable_referenced() != NULL
691                  && lhs->variable_referenced()->read_only) {
692          _mesa_glsl_error(&lhs_loc, state,
693                           "assignment to read-only variable '%s'",
694                           lhs->variable_referenced()->name);
695          error_emitted = true;
696
697       } else if (state->language_version <= 110 && lhs->type->is_array()) {
698          /* From page 32 (page 38 of the PDF) of the GLSL 1.10 spec:
699           *
700           *    "Other binary or unary expressions, non-dereferenced
701           *     arrays, function names, swizzles with repeated fields,
702           *     and constants cannot be l-values."
703           */
704          _mesa_glsl_error(&lhs_loc, state, "whole array assignment is not "
705                           "allowed in GLSL 1.10 or GLSL ES 1.00.");
706          error_emitted = true;
707       } else if (!lhs->is_lvalue()) {
708          _mesa_glsl_error(& lhs_loc, state, "non-lvalue in assignment");
709          error_emitted = true;
710       }
711    }
712
713    ir_rvalue *new_rhs =
714       validate_assignment(state, lhs->type, rhs, is_initializer);
715    if (new_rhs == NULL) {
716       _mesa_glsl_error(& lhs_loc, state, "type mismatch");
717    } else {
718       rhs = new_rhs;
719
720       /* If the LHS array was not declared with a size, it takes it size from
721        * the RHS.  If the LHS is an l-value and a whole array, it must be a
722        * dereference of a variable.  Any other case would require that the LHS
723        * is either not an l-value or not a whole array.
724        */
725       if (lhs->type->array_size() == 0) {
726          ir_dereference *const d = lhs->as_dereference();
727
728          assert(d != NULL);
729
730          ir_variable *const var = d->variable_referenced();
731
732          assert(var != NULL);
733
734          if (var->max_array_access >= unsigned(rhs->type->array_size())) {
735             /* FINISHME: This should actually log the location of the RHS. */
736             _mesa_glsl_error(& lhs_loc, state, "array size must be > %u due to "
737                              "previous access",
738                              var->max_array_access);
739          }
740
741          var->type = glsl_type::get_array_instance(lhs->type->element_type(),
742                                                    rhs->type->array_size());
743          d->type = var->type;
744       }
745       mark_whole_array_access(rhs);
746       mark_whole_array_access(lhs);
747    }
748
749    /* Most callers of do_assignment (assign, add_assign, pre_inc/dec,
750     * but not post_inc) need the converted assigned value as an rvalue
751     * to handle things like:
752     *
753     * i = j += 1;
754     *
755     * So we always just store the computed value being assigned to a
756     * temporary and return a deref of that temporary.  If the rvalue
757     * ends up not being used, the temp will get copy-propagated out.
758     */
759    ir_variable *var = new(ctx) ir_variable(rhs->type, "assignment_tmp",
760                                            ir_var_temporary);
761    ir_dereference_variable *deref_var = new(ctx) ir_dereference_variable(var);
762    instructions->push_tail(var);
763    instructions->push_tail(new(ctx) ir_assignment(deref_var, rhs));
764    deref_var = new(ctx) ir_dereference_variable(var);
765
766    if (!error_emitted)
767       instructions->push_tail(new(ctx) ir_assignment(lhs, deref_var));
768
769    return new(ctx) ir_dereference_variable(var);
770 }
771
772 static ir_rvalue *
773 get_lvalue_copy(exec_list *instructions, ir_rvalue *lvalue)
774 {
775    void *ctx = ralloc_parent(lvalue);
776    ir_variable *var;
777
778    var = new(ctx) ir_variable(lvalue->type, "_post_incdec_tmp",
779                               ir_var_temporary);
780    instructions->push_tail(var);
781    var->mode = ir_var_auto;
782
783    instructions->push_tail(new(ctx) ir_assignment(new(ctx) ir_dereference_variable(var),
784                                                   lvalue));
785
786    return new(ctx) ir_dereference_variable(var);
787 }
788
789
790 ir_rvalue *
791 ast_node::hir(exec_list *instructions,
792               struct _mesa_glsl_parse_state *state)
793 {
794    (void) instructions;
795    (void) state;
796
797    return NULL;
798 }
799
800 static ir_rvalue *
801 do_comparison(void *mem_ctx, int operation, ir_rvalue *op0, ir_rvalue *op1)
802 {
803    int join_op;
804    ir_rvalue *cmp = NULL;
805
806    if (operation == ir_binop_all_equal)
807       join_op = ir_binop_logic_and;
808    else
809       join_op = ir_binop_logic_or;
810
811    switch (op0->type->base_type) {
812    case GLSL_TYPE_FLOAT:
813    case GLSL_TYPE_UINT:
814    case GLSL_TYPE_INT:
815    case GLSL_TYPE_BOOL:
816       return new(mem_ctx) ir_expression(operation, op0, op1);
817
818    case GLSL_TYPE_ARRAY: {
819       for (unsigned int i = 0; i < op0->type->length; i++) {
820          ir_rvalue *e0, *e1, *result;
821
822          e0 = new(mem_ctx) ir_dereference_array(op0->clone(mem_ctx, NULL),
823                                                 new(mem_ctx) ir_constant(i));
824          e1 = new(mem_ctx) ir_dereference_array(op1->clone(mem_ctx, NULL),
825                                                 new(mem_ctx) ir_constant(i));
826          result = do_comparison(mem_ctx, operation, e0, e1);
827
828          if (cmp) {
829             cmp = new(mem_ctx) ir_expression(join_op, cmp, result);
830          } else {
831             cmp = result;
832          }
833       }
834
835       mark_whole_array_access(op0);
836       mark_whole_array_access(op1);
837       break;
838    }
839
840    case GLSL_TYPE_STRUCT: {
841       for (unsigned int i = 0; i < op0->type->length; i++) {
842          ir_rvalue *e0, *e1, *result;
843          const char *field_name = op0->type->fields.structure[i].name;
844
845          e0 = new(mem_ctx) ir_dereference_record(op0->clone(mem_ctx, NULL),
846                                                  field_name);
847          e1 = new(mem_ctx) ir_dereference_record(op1->clone(mem_ctx, NULL),
848                                                  field_name);
849          result = do_comparison(mem_ctx, operation, e0, e1);
850
851          if (cmp) {
852             cmp = new(mem_ctx) ir_expression(join_op, cmp, result);
853          } else {
854             cmp = result;
855          }
856       }
857       break;
858    }
859
860    case GLSL_TYPE_ERROR:
861    case GLSL_TYPE_VOID:
862    case GLSL_TYPE_SAMPLER:
863       /* I assume a comparison of a struct containing a sampler just
864        * ignores the sampler present in the type.
865        */
866       break;
867
868    default:
869       assert(!"Should not get here.");
870       break;
871    }
872
873    if (cmp == NULL)
874       cmp = new(mem_ctx) ir_constant(true);
875
876    return cmp;
877 }
878
879 /* For logical operations, we want to ensure that the operands are
880  * scalar booleans.  If it isn't, emit an error and return a constant
881  * boolean to avoid triggering cascading error messages.
882  */
883 ir_rvalue *
884 get_scalar_boolean_operand(exec_list *instructions,
885                            struct _mesa_glsl_parse_state *state,
886                            ast_expression *parent_expr,
887                            int operand,
888                            const char *operand_name,
889                            bool *error_emitted)
890 {
891    ast_expression *expr = parent_expr->subexpressions[operand];
892    void *ctx = state;
893    ir_rvalue *val = expr->hir(instructions, state);
894
895    if (val->type->is_boolean() && val->type->is_scalar())
896       return val;
897
898    if (!*error_emitted) {
899       YYLTYPE loc = expr->get_location();
900       _mesa_glsl_error(&loc, state, "%s of `%s' must be scalar boolean",
901                        operand_name,
902                        parent_expr->operator_string(parent_expr->oper));
903       *error_emitted = true;
904    }
905
906    return new(ctx) ir_constant(true);
907 }
908
909 /**
910  * If name refers to a builtin array whose maximum allowed size is less than
911  * size, report an error and return true.  Otherwise return false.
912  */
913 static bool
914 check_builtin_array_max_size(const char *name, unsigned size,
915                              YYLTYPE loc, struct _mesa_glsl_parse_state *state)
916 {
917    if ((strcmp("gl_TexCoord", name) == 0)
918        && (size > state->Const.MaxTextureCoords)) {
919       /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec:
920        *
921        *     "The size [of gl_TexCoord] can be at most
922        *     gl_MaxTextureCoords."
923        */
924       _mesa_glsl_error(&loc, state, "`gl_TexCoord' array size cannot "
925                        "be larger than gl_MaxTextureCoords (%u)\n",
926                        state->Const.MaxTextureCoords);
927       return true;
928    } else if (strcmp("gl_ClipDistance", name) == 0
929               && size > state->Const.MaxClipPlanes) {
930       /* From section 7.1 (Vertex Shader Special Variables) of the
931        * GLSL 1.30 spec:
932        *
933        *   "The gl_ClipDistance array is predeclared as unsized and
934        *   must be sized by the shader either redeclaring it with a
935        *   size or indexing it only with integral constant
936        *   expressions. ... The size can be at most
937        *   gl_MaxClipDistances."
938        */
939       _mesa_glsl_error(&loc, state, "`gl_ClipDistance' array size cannot "
940                        "be larger than gl_MaxClipDistances (%u)\n",
941                        state->Const.MaxClipPlanes);
942       return true;
943    }
944    return false;
945 }
946
947 /**
948  * Create the constant 1, of a which is appropriate for incrementing and
949  * decrementing values of the given GLSL type.  For example, if type is vec4,
950  * this creates a constant value of 1.0 having type float.
951  *
952  * If the given type is invalid for increment and decrement operators, return
953  * a floating point 1--the error will be detected later.
954  */
955 static ir_rvalue *
956 constant_one_for_inc_dec(void *ctx, const glsl_type *type)
957 {
958    switch (type->base_type) {
959    case GLSL_TYPE_UINT:
960       return new(ctx) ir_constant((unsigned) 1);
961    case GLSL_TYPE_INT:
962       return new(ctx) ir_constant(1);
963    default:
964    case GLSL_TYPE_FLOAT:
965       return new(ctx) ir_constant(1.0f);
966    }
967 }
968
969 ir_rvalue *
970 ast_expression::hir(exec_list *instructions,
971                     struct _mesa_glsl_parse_state *state)
972 {
973    void *ctx = state;
974    static const int operations[AST_NUM_OPERATORS] = {
975       -1,               /* ast_assign doesn't convert to ir_expression. */
976       -1,               /* ast_plus doesn't convert to ir_expression. */
977       ir_unop_neg,
978       ir_binop_add,
979       ir_binop_sub,
980       ir_binop_mul,
981       ir_binop_div,
982       ir_binop_mod,
983       ir_binop_lshift,
984       ir_binop_rshift,
985       ir_binop_less,
986       ir_binop_greater,
987       ir_binop_lequal,
988       ir_binop_gequal,
989       ir_binop_all_equal,
990       ir_binop_any_nequal,
991       ir_binop_bit_and,
992       ir_binop_bit_xor,
993       ir_binop_bit_or,
994       ir_unop_bit_not,
995       ir_binop_logic_and,
996       ir_binop_logic_xor,
997       ir_binop_logic_or,
998       ir_unop_logic_not,
999
1000       /* Note: The following block of expression types actually convert
1001        * to multiple IR instructions.
1002        */
1003       ir_binop_mul,     /* ast_mul_assign */
1004       ir_binop_div,     /* ast_div_assign */
1005       ir_binop_mod,     /* ast_mod_assign */
1006       ir_binop_add,     /* ast_add_assign */
1007       ir_binop_sub,     /* ast_sub_assign */
1008       ir_binop_lshift,  /* ast_ls_assign */
1009       ir_binop_rshift,  /* ast_rs_assign */
1010       ir_binop_bit_and, /* ast_and_assign */
1011       ir_binop_bit_xor, /* ast_xor_assign */
1012       ir_binop_bit_or,  /* ast_or_assign */
1013
1014       -1,               /* ast_conditional doesn't convert to ir_expression. */
1015       ir_binop_add,     /* ast_pre_inc. */
1016       ir_binop_sub,     /* ast_pre_dec. */
1017       ir_binop_add,     /* ast_post_inc. */
1018       ir_binop_sub,     /* ast_post_dec. */
1019       -1,               /* ast_field_selection doesn't conv to ir_expression. */
1020       -1,               /* ast_array_index doesn't convert to ir_expression. */
1021       -1,               /* ast_function_call doesn't conv to ir_expression. */
1022       -1,               /* ast_identifier doesn't convert to ir_expression. */
1023       -1,               /* ast_int_constant doesn't convert to ir_expression. */
1024       -1,               /* ast_uint_constant doesn't conv to ir_expression. */
1025       -1,               /* ast_float_constant doesn't conv to ir_expression. */
1026       -1,               /* ast_bool_constant doesn't conv to ir_expression. */
1027       -1,               /* ast_sequence doesn't convert to ir_expression. */
1028    };
1029    ir_rvalue *result = NULL;
1030    ir_rvalue *op[3];
1031    const struct glsl_type *type; /* a temporary variable for switch cases */
1032    bool error_emitted = false;
1033    YYLTYPE loc;
1034
1035    loc = this->get_location();
1036
1037    switch (this->oper) {
1038    case ast_assign: {
1039       op[0] = this->subexpressions[0]->hir(instructions, state);
1040       op[1] = this->subexpressions[1]->hir(instructions, state);
1041
1042       result = do_assignment(instructions, state,
1043                              this->subexpressions[0]->non_lvalue_description,
1044                              op[0], op[1], false,
1045                              this->subexpressions[0]->get_location());
1046       error_emitted = result->type->is_error();
1047       break;
1048    }
1049
1050    case ast_plus:
1051       op[0] = this->subexpressions[0]->hir(instructions, state);
1052
1053       type = unary_arithmetic_result_type(op[0]->type, state, & loc);
1054
1055       error_emitted = type->is_error();
1056
1057       result = op[0];
1058       break;
1059
1060    case ast_neg:
1061       op[0] = this->subexpressions[0]->hir(instructions, state);
1062
1063       type = unary_arithmetic_result_type(op[0]->type, state, & loc);
1064
1065       error_emitted = type->is_error();
1066
1067       result = new(ctx) ir_expression(operations[this->oper], type,
1068                                       op[0], NULL);
1069       break;
1070
1071    case ast_add:
1072    case ast_sub:
1073    case ast_mul:
1074    case ast_div:
1075       op[0] = this->subexpressions[0]->hir(instructions, state);
1076       op[1] = this->subexpressions[1]->hir(instructions, state);
1077
1078       type = arithmetic_result_type(op[0], op[1],
1079                                     (this->oper == ast_mul),
1080                                     state, & loc);
1081       error_emitted = type->is_error();
1082
1083       result = new(ctx) ir_expression(operations[this->oper], type,
1084                                       op[0], op[1]);
1085       break;
1086
1087    case ast_mod:
1088       op[0] = this->subexpressions[0]->hir(instructions, state);
1089       op[1] = this->subexpressions[1]->hir(instructions, state);
1090
1091       type = modulus_result_type(op[0]->type, op[1]->type, state, & loc);
1092
1093       assert(operations[this->oper] == ir_binop_mod);
1094
1095       result = new(ctx) ir_expression(operations[this->oper], type,
1096                                       op[0], op[1]);
1097       error_emitted = type->is_error();
1098       break;
1099
1100    case ast_lshift:
1101    case ast_rshift:
1102        if (state->language_version < 130) {
1103           _mesa_glsl_error(&loc, state, "operator %s requires GLSL 1.30",
1104               operator_string(this->oper));
1105           error_emitted = true;
1106        }
1107
1108        op[0] = this->subexpressions[0]->hir(instructions, state);
1109        op[1] = this->subexpressions[1]->hir(instructions, state);
1110        type = shift_result_type(op[0]->type, op[1]->type, this->oper, state,
1111                                 &loc);
1112        result = new(ctx) ir_expression(operations[this->oper], type,
1113                                        op[0], op[1]);
1114        error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1115        break;
1116
1117    case ast_less:
1118    case ast_greater:
1119    case ast_lequal:
1120    case ast_gequal:
1121       op[0] = this->subexpressions[0]->hir(instructions, state);
1122       op[1] = this->subexpressions[1]->hir(instructions, state);
1123
1124       type = relational_result_type(op[0], op[1], state, & loc);
1125
1126       /* The relational operators must either generate an error or result
1127        * in a scalar boolean.  See page 57 of the GLSL 1.50 spec.
1128        */
1129       assert(type->is_error()
1130              || ((type->base_type == GLSL_TYPE_BOOL)
1131                  && type->is_scalar()));
1132
1133       result = new(ctx) ir_expression(operations[this->oper], type,
1134                                       op[0], op[1]);
1135       error_emitted = type->is_error();
1136       break;
1137
1138    case ast_nequal:
1139    case ast_equal:
1140       op[0] = this->subexpressions[0]->hir(instructions, state);
1141       op[1] = this->subexpressions[1]->hir(instructions, state);
1142
1143       /* From page 58 (page 64 of the PDF) of the GLSL 1.50 spec:
1144        *
1145        *    "The equality operators equal (==), and not equal (!=)
1146        *    operate on all types. They result in a scalar Boolean. If
1147        *    the operand types do not match, then there must be a
1148        *    conversion from Section 4.1.10 "Implicit Conversions"
1149        *    applied to one operand that can make them match, in which
1150        *    case this conversion is done."
1151        */
1152       if ((!apply_implicit_conversion(op[0]->type, op[1], state)
1153            && !apply_implicit_conversion(op[1]->type, op[0], state))
1154           || (op[0]->type != op[1]->type)) {
1155          _mesa_glsl_error(& loc, state, "operands of `%s' must have the same "
1156                           "type", (this->oper == ast_equal) ? "==" : "!=");
1157          error_emitted = true;
1158       } else if ((state->language_version <= 110)
1159                  && (op[0]->type->is_array() || op[1]->type->is_array())) {
1160          _mesa_glsl_error(& loc, state, "array comparisons forbidden in "
1161                           "GLSL 1.10");
1162          error_emitted = true;
1163       }
1164
1165       if (error_emitted) {
1166          result = new(ctx) ir_constant(false);
1167       } else {
1168          result = do_comparison(ctx, operations[this->oper], op[0], op[1]);
1169          assert(result->type == glsl_type::bool_type);
1170       }
1171       break;
1172
1173    case ast_bit_and:
1174    case ast_bit_xor:
1175    case ast_bit_or:
1176       op[0] = this->subexpressions[0]->hir(instructions, state);
1177       op[1] = this->subexpressions[1]->hir(instructions, state);
1178       type = bit_logic_result_type(op[0]->type, op[1]->type, this->oper,
1179                                    state, &loc);
1180       result = new(ctx) ir_expression(operations[this->oper], type,
1181                                       op[0], op[1]);
1182       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1183       break;
1184
1185    case ast_bit_not:
1186       op[0] = this->subexpressions[0]->hir(instructions, state);
1187
1188       if (state->language_version < 130) {
1189          _mesa_glsl_error(&loc, state, "bit-wise operations require GLSL 1.30");
1190          error_emitted = true;
1191       }
1192
1193       if (!op[0]->type->is_integer()) {
1194          _mesa_glsl_error(&loc, state, "operand of `~' must be an integer");
1195          error_emitted = true;
1196       }
1197
1198       type = error_emitted ? glsl_type::error_type : op[0]->type;
1199       result = new(ctx) ir_expression(ir_unop_bit_not, type, op[0], NULL);
1200       break;
1201
1202    case ast_logic_and: {
1203       exec_list rhs_instructions;
1204       op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1205                                          "LHS", &error_emitted);
1206       op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1,
1207                                          "RHS", &error_emitted);
1208
1209       if (rhs_instructions.is_empty()) {
1210          result = new(ctx) ir_expression(ir_binop_logic_and, op[0], op[1]);
1211          type = result->type;
1212       } else {
1213          ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type,
1214                                                        "and_tmp",
1215                                                        ir_var_temporary);
1216          instructions->push_tail(tmp);
1217
1218          ir_if *const stmt = new(ctx) ir_if(op[0]);
1219          instructions->push_tail(stmt);
1220
1221          stmt->then_instructions.append_list(&rhs_instructions);
1222          ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp);
1223          ir_assignment *const then_assign =
1224             new(ctx) ir_assignment(then_deref, op[1]);
1225          stmt->then_instructions.push_tail(then_assign);
1226
1227          ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp);
1228          ir_assignment *const else_assign =
1229             new(ctx) ir_assignment(else_deref, new(ctx) ir_constant(false));
1230          stmt->else_instructions.push_tail(else_assign);
1231
1232          result = new(ctx) ir_dereference_variable(tmp);
1233          type = tmp->type;
1234       }
1235       break;
1236    }
1237
1238    case ast_logic_or: {
1239       exec_list rhs_instructions;
1240       op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1241                                          "LHS", &error_emitted);
1242       op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1,
1243                                          "RHS", &error_emitted);
1244
1245       if (rhs_instructions.is_empty()) {
1246          result = new(ctx) ir_expression(ir_binop_logic_or, op[0], op[1]);
1247          type = result->type;
1248       } else {
1249          ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type,
1250                                                        "or_tmp",
1251                                                        ir_var_temporary);
1252          instructions->push_tail(tmp);
1253
1254          ir_if *const stmt = new(ctx) ir_if(op[0]);
1255          instructions->push_tail(stmt);
1256
1257          ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp);
1258          ir_assignment *const then_assign =
1259             new(ctx) ir_assignment(then_deref, new(ctx) ir_constant(true));
1260          stmt->then_instructions.push_tail(then_assign);
1261
1262          stmt->else_instructions.append_list(&rhs_instructions);
1263          ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp);
1264          ir_assignment *const else_assign =
1265             new(ctx) ir_assignment(else_deref, op[1]);
1266          stmt->else_instructions.push_tail(else_assign);
1267
1268          result = new(ctx) ir_dereference_variable(tmp);
1269          type = tmp->type;
1270       }
1271       break;
1272    }
1273
1274    case ast_logic_xor:
1275       /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec:
1276        *
1277        *    "The logical binary operators and (&&), or ( | | ), and
1278        *     exclusive or (^^). They operate only on two Boolean
1279        *     expressions and result in a Boolean expression."
1280        */
1281       op[0] = get_scalar_boolean_operand(instructions, state, this, 0, "LHS",
1282                                          &error_emitted);
1283       op[1] = get_scalar_boolean_operand(instructions, state, this, 1, "RHS",
1284                                          &error_emitted);
1285
1286       result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type,
1287                                       op[0], op[1]);
1288       break;
1289
1290    case ast_logic_not:
1291       op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1292                                          "operand", &error_emitted);
1293
1294       result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type,
1295                                       op[0], NULL);
1296       break;
1297
1298    case ast_mul_assign:
1299    case ast_div_assign:
1300    case ast_add_assign:
1301    case ast_sub_assign: {
1302       op[0] = this->subexpressions[0]->hir(instructions, state);
1303       op[1] = this->subexpressions[1]->hir(instructions, state);
1304
1305       type = arithmetic_result_type(op[0], op[1],
1306                                     (this->oper == ast_mul_assign),
1307                                     state, & loc);
1308
1309       ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1310                                                    op[0], op[1]);
1311
1312       result = do_assignment(instructions, state,
1313                              this->subexpressions[0]->non_lvalue_description,
1314                              op[0]->clone(ctx, NULL), temp_rhs, false,
1315                              this->subexpressions[0]->get_location());
1316       error_emitted = (op[0]->type->is_error());
1317
1318       /* GLSL 1.10 does not allow array assignment.  However, we don't have to
1319        * explicitly test for this because none of the binary expression
1320        * operators allow array operands either.
1321        */
1322
1323       break;
1324    }
1325
1326    case ast_mod_assign: {
1327       op[0] = this->subexpressions[0]->hir(instructions, state);
1328       op[1] = this->subexpressions[1]->hir(instructions, state);
1329
1330       type = modulus_result_type(op[0]->type, op[1]->type, state, & loc);
1331
1332       assert(operations[this->oper] == ir_binop_mod);
1333
1334       ir_rvalue *temp_rhs;
1335       temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1336                                         op[0], op[1]);
1337
1338       result = do_assignment(instructions, state,
1339                              this->subexpressions[0]->non_lvalue_description,
1340                              op[0]->clone(ctx, NULL), temp_rhs, false,
1341                              this->subexpressions[0]->get_location());
1342       error_emitted = type->is_error();
1343       break;
1344    }
1345
1346    case ast_ls_assign:
1347    case ast_rs_assign: {
1348       op[0] = this->subexpressions[0]->hir(instructions, state);
1349       op[1] = this->subexpressions[1]->hir(instructions, state);
1350       type = shift_result_type(op[0]->type, op[1]->type, this->oper, state,
1351                                &loc);
1352       ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper],
1353                                                    type, op[0], op[1]);
1354       result = do_assignment(instructions, state,
1355                              this->subexpressions[0]->non_lvalue_description,
1356                              op[0]->clone(ctx, NULL), temp_rhs, false,
1357                              this->subexpressions[0]->get_location());
1358       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1359       break;
1360    }
1361
1362    case ast_and_assign:
1363    case ast_xor_assign:
1364    case ast_or_assign: {
1365       op[0] = this->subexpressions[0]->hir(instructions, state);
1366       op[1] = this->subexpressions[1]->hir(instructions, state);
1367       type = bit_logic_result_type(op[0]->type, op[1]->type, this->oper,
1368                                    state, &loc);
1369       ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper],
1370                                                    type, op[0], op[1]);
1371       result = do_assignment(instructions, state,
1372                              this->subexpressions[0]->non_lvalue_description,
1373                              op[0]->clone(ctx, NULL), temp_rhs, false,
1374                              this->subexpressions[0]->get_location());
1375       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1376       break;
1377    }
1378
1379    case ast_conditional: {
1380       /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec:
1381        *
1382        *    "The ternary selection operator (?:). It operates on three
1383        *    expressions (exp1 ? exp2 : exp3). This operator evaluates the
1384        *    first expression, which must result in a scalar Boolean."
1385        */
1386       op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1387                                          "condition", &error_emitted);
1388
1389       /* The :? operator is implemented by generating an anonymous temporary
1390        * followed by an if-statement.  The last instruction in each branch of
1391        * the if-statement assigns a value to the anonymous temporary.  This
1392        * temporary is the r-value of the expression.
1393        */
1394       exec_list then_instructions;
1395       exec_list else_instructions;
1396
1397       op[1] = this->subexpressions[1]->hir(&then_instructions, state);
1398       op[2] = this->subexpressions[2]->hir(&else_instructions, state);
1399
1400       /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec:
1401        *
1402        *     "The second and third expressions can be any type, as
1403        *     long their types match, or there is a conversion in
1404        *     Section 4.1.10 "Implicit Conversions" that can be applied
1405        *     to one of the expressions to make their types match. This
1406        *     resulting matching type is the type of the entire
1407        *     expression."
1408        */
1409       if ((!apply_implicit_conversion(op[1]->type, op[2], state)
1410            && !apply_implicit_conversion(op[2]->type, op[1], state))
1411           || (op[1]->type != op[2]->type)) {
1412          YYLTYPE loc = this->subexpressions[1]->get_location();
1413
1414          _mesa_glsl_error(& loc, state, "Second and third operands of ?: "
1415                           "operator must have matching types.");
1416          error_emitted = true;
1417          type = glsl_type::error_type;
1418       } else {
1419          type = op[1]->type;
1420       }
1421
1422       /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec:
1423        *
1424        *    "The second and third expressions must be the same type, but can
1425        *    be of any type other than an array."
1426        */
1427       if ((state->language_version <= 110) && type->is_array()) {
1428          _mesa_glsl_error(& loc, state, "Second and third operands of ?: "
1429                           "operator must not be arrays.");
1430          error_emitted = true;
1431       }
1432
1433       ir_constant *cond_val = op[0]->constant_expression_value();
1434       ir_constant *then_val = op[1]->constant_expression_value();
1435       ir_constant *else_val = op[2]->constant_expression_value();
1436
1437       if (then_instructions.is_empty()
1438           && else_instructions.is_empty()
1439           && (cond_val != NULL) && (then_val != NULL) && (else_val != NULL)) {
1440          result = (cond_val->value.b[0]) ? then_val : else_val;
1441       } else {
1442          ir_variable *const tmp =
1443             new(ctx) ir_variable(type, "conditional_tmp", ir_var_temporary);
1444          instructions->push_tail(tmp);
1445
1446          ir_if *const stmt = new(ctx) ir_if(op[0]);
1447          instructions->push_tail(stmt);
1448
1449          then_instructions.move_nodes_to(& stmt->then_instructions);
1450          ir_dereference *const then_deref =
1451             new(ctx) ir_dereference_variable(tmp);
1452          ir_assignment *const then_assign =
1453             new(ctx) ir_assignment(then_deref, op[1]);
1454          stmt->then_instructions.push_tail(then_assign);
1455
1456          else_instructions.move_nodes_to(& stmt->else_instructions);
1457          ir_dereference *const else_deref =
1458             new(ctx) ir_dereference_variable(tmp);
1459          ir_assignment *const else_assign =
1460             new(ctx) ir_assignment(else_deref, op[2]);
1461          stmt->else_instructions.push_tail(else_assign);
1462
1463          result = new(ctx) ir_dereference_variable(tmp);
1464       }
1465       break;
1466    }
1467
1468    case ast_pre_inc:
1469    case ast_pre_dec: {
1470       this->non_lvalue_description = (this->oper == ast_pre_inc)
1471          ? "pre-increment operation" : "pre-decrement operation";
1472
1473       op[0] = this->subexpressions[0]->hir(instructions, state);
1474       op[1] = constant_one_for_inc_dec(ctx, op[0]->type);
1475
1476       type = arithmetic_result_type(op[0], op[1], false, state, & loc);
1477
1478       ir_rvalue *temp_rhs;
1479       temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1480                                         op[0], op[1]);
1481
1482       result = do_assignment(instructions, state,
1483                              this->subexpressions[0]->non_lvalue_description,
1484                              op[0]->clone(ctx, NULL), temp_rhs, false,
1485                              this->subexpressions[0]->get_location());
1486       error_emitted = op[0]->type->is_error();
1487       break;
1488    }
1489
1490    case ast_post_inc:
1491    case ast_post_dec: {
1492       this->non_lvalue_description = (this->oper == ast_post_inc)
1493          ? "post-increment operation" : "post-decrement operation";
1494       op[0] = this->subexpressions[0]->hir(instructions, state);
1495       op[1] = constant_one_for_inc_dec(ctx, op[0]->type);
1496
1497       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1498
1499       type = arithmetic_result_type(op[0], op[1], false, state, & loc);
1500
1501       ir_rvalue *temp_rhs;
1502       temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1503                                         op[0], op[1]);
1504
1505       /* Get a temporary of a copy of the lvalue before it's modified.
1506        * This may get thrown away later.
1507        */
1508       result = get_lvalue_copy(instructions, op[0]->clone(ctx, NULL));
1509
1510       (void)do_assignment(instructions, state,
1511                           this->subexpressions[0]->non_lvalue_description,
1512                           op[0]->clone(ctx, NULL), temp_rhs, false,
1513                           this->subexpressions[0]->get_location());
1514
1515       error_emitted = op[0]->type->is_error();
1516       break;
1517    }
1518
1519    case ast_field_selection:
1520       result = _mesa_ast_field_selection_to_hir(this, instructions, state);
1521       break;
1522
1523    case ast_array_index: {
1524       YYLTYPE index_loc = subexpressions[1]->get_location();
1525
1526       op[0] = subexpressions[0]->hir(instructions, state);
1527       op[1] = subexpressions[1]->hir(instructions, state);
1528
1529       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1530
1531       ir_rvalue *const array = op[0];
1532
1533       result = new(ctx) ir_dereference_array(op[0], op[1]);
1534
1535       /* Do not use op[0] after this point.  Use array.
1536        */
1537       op[0] = NULL;
1538
1539
1540       if (error_emitted)
1541          break;
1542
1543       if (!array->type->is_array()
1544           && !array->type->is_matrix()
1545           && !array->type->is_vector()) {
1546          _mesa_glsl_error(& index_loc, state,
1547                           "cannot dereference non-array / non-matrix / "
1548                           "non-vector");
1549          error_emitted = true;
1550       }
1551
1552       if (!op[1]->type->is_integer()) {
1553          _mesa_glsl_error(& index_loc, state,
1554                           "array index must be integer type");
1555          error_emitted = true;
1556       } else if (!op[1]->type->is_scalar()) {
1557          _mesa_glsl_error(& index_loc, state,
1558                           "array index must be scalar");
1559          error_emitted = true;
1560       }
1561
1562       /* If the array index is a constant expression and the array has a
1563        * declared size, ensure that the access is in-bounds.  If the array
1564        * index is not a constant expression, ensure that the array has a
1565        * declared size.
1566        */
1567       ir_constant *const const_index = op[1]->constant_expression_value();
1568       if (const_index != NULL) {
1569          const int idx = const_index->value.i[0];
1570          const char *type_name;
1571          unsigned bound = 0;
1572
1573          if (array->type->is_matrix()) {
1574             type_name = "matrix";
1575          } else if (array->type->is_vector()) {
1576             type_name = "vector";
1577          } else {
1578             type_name = "array";
1579          }
1580
1581          /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec:
1582           *
1583           *    "It is illegal to declare an array with a size, and then
1584           *    later (in the same shader) index the same array with an
1585           *    integral constant expression greater than or equal to the
1586           *    declared size. It is also illegal to index an array with a
1587           *    negative constant expression."
1588           */
1589          if (array->type->is_matrix()) {
1590             if (array->type->row_type()->vector_elements <= idx) {
1591                bound = array->type->row_type()->vector_elements;
1592             }
1593          } else if (array->type->is_vector()) {
1594             if (array->type->vector_elements <= idx) {
1595                bound = array->type->vector_elements;
1596             }
1597          } else {
1598             if ((array->type->array_size() > 0)
1599                 && (array->type->array_size() <= idx)) {
1600                bound = array->type->array_size();
1601             }
1602          }
1603
1604          if (bound > 0) {
1605             _mesa_glsl_error(& loc, state, "%s index must be < %u",
1606                              type_name, bound);
1607             error_emitted = true;
1608          } else if (idx < 0) {
1609             _mesa_glsl_error(& loc, state, "%s index must be >= 0",
1610                              type_name);
1611             error_emitted = true;
1612          }
1613
1614          if (array->type->is_array()) {
1615             /* If the array is a variable dereference, it dereferences the
1616              * whole array, by definition.  Use this to get the variable.
1617              *
1618              * FINISHME: Should some methods for getting / setting / testing
1619              * FINISHME: array access limits be added to ir_dereference?
1620              */
1621             ir_variable *const v = array->whole_variable_referenced();
1622             if ((v != NULL) && (unsigned(idx) > v->max_array_access)) {
1623                v->max_array_access = idx;
1624
1625                /* Check whether this access will, as a side effect, implicitly
1626                 * cause the size of a built-in array to be too large.
1627                 */
1628                if (check_builtin_array_max_size(v->name, idx+1, loc, state))
1629                   error_emitted = true;
1630             }
1631          }
1632       } else if (array->type->array_size() == 0) {
1633          _mesa_glsl_error(&loc, state, "unsized array index must be constant");
1634       } else {
1635          if (array->type->is_array()) {
1636             /* whole_variable_referenced can return NULL if the array is a
1637              * member of a structure.  In this case it is safe to not update
1638              * the max_array_access field because it is never used for fields
1639              * of structures.
1640              */
1641             ir_variable *v = array->whole_variable_referenced();
1642             if (v != NULL)
1643                v->max_array_access = array->type->array_size() - 1;
1644          }
1645       }
1646
1647       /* From page 23 (29 of the PDF) of the GLSL 1.30 spec:
1648        *
1649        *    "Samplers aggregated into arrays within a shader (using square
1650        *    brackets [ ]) can only be indexed with integral constant
1651        *    expressions [...]."
1652        *
1653        * This restriction was added in GLSL 1.30.  Shaders using earlier version
1654        * of the language should not be rejected by the compiler front-end for
1655        * using this construct.  This allows useful things such as using a loop
1656        * counter as the index to an array of samplers.  If the loop in unrolled,
1657        * the code should compile correctly.  Instead, emit a warning.
1658        */
1659       if (array->type->is_array() &&
1660           array->type->element_type()->is_sampler() &&
1661           const_index == NULL) {
1662
1663          if (state->language_version == 100) {
1664             _mesa_glsl_warning(&loc, state,
1665                                "sampler arrays indexed with non-constant "
1666                                "expressions is optional in GLSL ES 1.00");
1667          } else if (state->language_version < 130) {
1668             _mesa_glsl_warning(&loc, state,
1669                                "sampler arrays indexed with non-constant "
1670                                "expressions is forbidden in GLSL 1.30 and "
1671                                "later");
1672          } else {
1673             _mesa_glsl_error(&loc, state,
1674                              "sampler arrays indexed with non-constant "
1675                              "expressions is forbidden in GLSL 1.30 and "
1676                              "later");
1677             error_emitted = true;
1678          }
1679       }
1680
1681       if (error_emitted)
1682          result->type = glsl_type::error_type;
1683
1684       break;
1685    }
1686
1687    case ast_function_call:
1688       /* Should *NEVER* get here.  ast_function_call should always be handled
1689        * by ast_function_expression::hir.
1690        */
1691       assert(0);
1692       break;
1693
1694    case ast_identifier: {
1695       /* ast_identifier can appear several places in a full abstract syntax
1696        * tree.  This particular use must be at location specified in the grammar
1697        * as 'variable_identifier'.
1698        */
1699       ir_variable *var = 
1700          state->symbols->get_variable(this->primary_expression.identifier);
1701
1702       if (var != NULL) {
1703          var->used = true;
1704          result = new(ctx) ir_dereference_variable(var);
1705       } else {
1706          _mesa_glsl_error(& loc, state, "`%s' undeclared",
1707                           this->primary_expression.identifier);
1708
1709          result = ir_rvalue::error_value(ctx);
1710          error_emitted = true;
1711       }
1712       break;
1713    }
1714
1715    case ast_int_constant:
1716       result = new(ctx) ir_constant(this->primary_expression.int_constant);
1717       break;
1718
1719    case ast_uint_constant:
1720       result = new(ctx) ir_constant(this->primary_expression.uint_constant);
1721       break;
1722
1723    case ast_float_constant:
1724       result = new(ctx) ir_constant(this->primary_expression.float_constant);
1725       break;
1726
1727    case ast_bool_constant:
1728       result = new(ctx) ir_constant(bool(this->primary_expression.bool_constant));
1729       break;
1730
1731    case ast_sequence: {
1732       /* It should not be possible to generate a sequence in the AST without
1733        * any expressions in it.
1734        */
1735       assert(!this->expressions.is_empty());
1736
1737       /* The r-value of a sequence is the last expression in the sequence.  If
1738        * the other expressions in the sequence do not have side-effects (and
1739        * therefore add instructions to the instruction list), they get dropped
1740        * on the floor.
1741        */
1742       exec_node *previous_tail_pred = NULL;
1743       YYLTYPE previous_operand_loc = loc;
1744
1745       foreach_list_typed (ast_node, ast, link, &this->expressions) {
1746          /* If one of the operands of comma operator does not generate any
1747           * code, we want to emit a warning.  At each pass through the loop
1748           * previous_tail_pred will point to the last instruction in the
1749           * stream *before* processing the previous operand.  Naturally,
1750           * instructions->tail_pred will point to the last instruction in the
1751           * stream *after* processing the previous operand.  If the two
1752           * pointers match, then the previous operand had no effect.
1753           *
1754           * The warning behavior here differs slightly from GCC.  GCC will
1755           * only emit a warning if none of the left-hand operands have an
1756           * effect.  However, it will emit a warning for each.  I believe that
1757           * there are some cases in C (especially with GCC extensions) where
1758           * it is useful to have an intermediate step in a sequence have no
1759           * effect, but I don't think these cases exist in GLSL.  Either way,
1760           * it would be a giant hassle to replicate that behavior.
1761           */
1762          if (previous_tail_pred == instructions->tail_pred) {
1763             _mesa_glsl_warning(&previous_operand_loc, state,
1764                                "left-hand operand of comma expression has "
1765                                "no effect");
1766          }
1767
1768          /* tail_pred is directly accessed instead of using the get_tail()
1769           * method for performance reasons.  get_tail() has extra code to
1770           * return NULL when the list is empty.  We don't care about that
1771           * here, so using tail_pred directly is fine.
1772           */
1773          previous_tail_pred = instructions->tail_pred;
1774          previous_operand_loc = ast->get_location();
1775
1776          result = ast->hir(instructions, state);
1777       }
1778
1779       /* Any errors should have already been emitted in the loop above.
1780        */
1781       error_emitted = true;
1782       break;
1783    }
1784    }
1785    type = NULL; /* use result->type, not type. */
1786    assert(result != NULL);
1787
1788    if (result->type->is_error() && !error_emitted)
1789       _mesa_glsl_error(& loc, state, "type mismatch");
1790
1791    return result;
1792 }
1793
1794
1795 ir_rvalue *
1796 ast_expression_statement::hir(exec_list *instructions,
1797                               struct _mesa_glsl_parse_state *state)
1798 {
1799    /* It is possible to have expression statements that don't have an
1800     * expression.  This is the solitary semicolon:
1801     *
1802     * for (i = 0; i < 5; i++)
1803     *     ;
1804     *
1805     * In this case the expression will be NULL.  Test for NULL and don't do
1806     * anything in that case.
1807     */
1808    if (expression != NULL)
1809       expression->hir(instructions, state);
1810
1811    /* Statements do not have r-values.
1812     */
1813    return NULL;
1814 }
1815
1816
1817 ir_rvalue *
1818 ast_compound_statement::hir(exec_list *instructions,
1819                             struct _mesa_glsl_parse_state *state)
1820 {
1821    if (new_scope)
1822       state->symbols->push_scope();
1823
1824    foreach_list_typed (ast_node, ast, link, &this->statements)
1825       ast->hir(instructions, state);
1826
1827    if (new_scope)
1828       state->symbols->pop_scope();
1829
1830    /* Compound statements do not have r-values.
1831     */
1832    return NULL;
1833 }
1834
1835
1836 static const glsl_type *
1837 process_array_type(YYLTYPE *loc, const glsl_type *base, ast_node *array_size,
1838                    struct _mesa_glsl_parse_state *state)
1839 {
1840    unsigned length = 0;
1841
1842    /* From page 19 (page 25) of the GLSL 1.20 spec:
1843     *
1844     *     "Only one-dimensional arrays may be declared."
1845     */
1846    if (base->is_array()) {
1847       _mesa_glsl_error(loc, state,
1848                        "invalid array of `%s' (only one-dimensional arrays "
1849                        "may be declared)",
1850                        base->name);
1851       return glsl_type::error_type;
1852    }
1853
1854    if (array_size != NULL) {
1855       exec_list dummy_instructions;
1856       ir_rvalue *const ir = array_size->hir(& dummy_instructions, state);
1857       YYLTYPE loc = array_size->get_location();
1858
1859       if (ir != NULL) {
1860          if (!ir->type->is_integer()) {
1861             _mesa_glsl_error(& loc, state, "array size must be integer type");
1862          } else if (!ir->type->is_scalar()) {
1863             _mesa_glsl_error(& loc, state, "array size must be scalar type");
1864          } else {
1865             ir_constant *const size = ir->constant_expression_value();
1866
1867             if (size == NULL) {
1868                _mesa_glsl_error(& loc, state, "array size must be a "
1869                                 "constant valued expression");
1870             } else if (size->value.i[0] <= 0) {
1871                _mesa_glsl_error(& loc, state, "array size must be > 0");
1872             } else {
1873                assert(size->type == ir->type);
1874                length = size->value.u[0];
1875
1876                /* If the array size is const (and we've verified that
1877                 * it is) then no instructions should have been emitted
1878                 * when we converted it to HIR.  If they were emitted,
1879                 * then either the array size isn't const after all, or
1880                 * we are emitting unnecessary instructions.
1881                 */
1882                assert(dummy_instructions.is_empty());
1883             }
1884          }
1885       }
1886    } else if (state->es_shader) {
1887       /* Section 10.17 of the GLSL ES 1.00 specification states that unsized
1888        * array declarations have been removed from the language.
1889        */
1890       _mesa_glsl_error(loc, state, "unsized array declarations are not "
1891                        "allowed in GLSL ES 1.00.");
1892    }
1893
1894    return glsl_type::get_array_instance(base, length);
1895 }
1896
1897
1898 const glsl_type *
1899 ast_type_specifier::glsl_type(const char **name,
1900                               struct _mesa_glsl_parse_state *state) const
1901 {
1902    const struct glsl_type *type;
1903
1904    type = state->symbols->get_type(this->type_name);
1905    *name = this->type_name;
1906
1907    if (this->is_array) {
1908       YYLTYPE loc = this->get_location();
1909       type = process_array_type(&loc, type, this->array_size, state);
1910    }
1911
1912    return type;
1913 }
1914
1915
1916 static void
1917 apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
1918                                  ir_variable *var,
1919                                  struct _mesa_glsl_parse_state *state,
1920                                  YYLTYPE *loc,
1921                                  bool ubo_qualifiers_valid)
1922 {
1923    if (qual->flags.q.invariant) {
1924       if (var->used) {
1925          _mesa_glsl_error(loc, state,
1926                           "variable `%s' may not be redeclared "
1927                           "`invariant' after being used",
1928                           var->name);
1929       } else {
1930          var->invariant = 1;
1931       }
1932    }
1933
1934    if (qual->flags.q.constant || qual->flags.q.attribute
1935        || qual->flags.q.uniform
1936        || (qual->flags.q.varying && (state->target == fragment_shader)))
1937       var->read_only = 1;
1938
1939    if (qual->flags.q.centroid)
1940       var->centroid = 1;
1941
1942    if (qual->flags.q.attribute && state->target != vertex_shader) {
1943       var->type = glsl_type::error_type;
1944       _mesa_glsl_error(loc, state,
1945                        "`attribute' variables may not be declared in the "
1946                        "%s shader",
1947                        _mesa_glsl_shader_target_name(state->target));
1948    }
1949
1950    /* From page 25 (page 31 of the PDF) of the GLSL 1.10 spec:
1951     *
1952     *     "The varying qualifier can be used only with the data types
1953     *     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of
1954     *     these."
1955     */
1956    if (qual->flags.q.varying) {
1957       const glsl_type *non_array_type;
1958
1959       if (var->type && var->type->is_array())
1960          non_array_type = var->type->fields.array;
1961       else
1962          non_array_type = var->type;
1963
1964       if (non_array_type && non_array_type->base_type != GLSL_TYPE_FLOAT) {
1965          var->type = glsl_type::error_type;
1966          _mesa_glsl_error(loc, state,
1967                           "varying variables must be of base type float");
1968       }
1969    }
1970
1971    /* If there is no qualifier that changes the mode of the variable, leave
1972     * the setting alone.
1973     */
1974    if (qual->flags.q.in && qual->flags.q.out)
1975       var->mode = ir_var_inout;
1976    else if (qual->flags.q.attribute || qual->flags.q.in
1977             || (qual->flags.q.varying && (state->target == fragment_shader)))
1978       var->mode = ir_var_in;
1979    else if (qual->flags.q.out
1980             || (qual->flags.q.varying && (state->target == vertex_shader)))
1981       var->mode = ir_var_out;
1982    else if (qual->flags.q.uniform)
1983       var->mode = ir_var_uniform;
1984
1985    if (state->all_invariant && (state->current_function == NULL)) {
1986       switch (state->target) {
1987       case vertex_shader:
1988          if (var->mode == ir_var_out)
1989             var->invariant = true;
1990          break;
1991       case geometry_shader:
1992          if ((var->mode == ir_var_in) || (var->mode == ir_var_out))
1993             var->invariant = true;
1994          break;
1995       case fragment_shader:
1996          if (var->mode == ir_var_in)
1997             var->invariant = true;
1998          break;
1999       }
2000    }
2001
2002    if (qual->flags.q.flat)
2003       var->interpolation = INTERP_QUALIFIER_FLAT;
2004    else if (qual->flags.q.noperspective)
2005       var->interpolation = INTERP_QUALIFIER_NOPERSPECTIVE;
2006    else if (qual->flags.q.smooth)
2007       var->interpolation = INTERP_QUALIFIER_SMOOTH;
2008    else
2009       var->interpolation = INTERP_QUALIFIER_NONE;
2010
2011    if (var->interpolation != INTERP_QUALIFIER_NONE &&
2012        !(state->target == vertex_shader && var->mode == ir_var_out) &&
2013        !(state->target == fragment_shader && var->mode == ir_var_in)) {
2014       _mesa_glsl_error(loc, state,
2015                        "interpolation qualifier `%s' can only be applied to "
2016                        "vertex shader outputs and fragment shader inputs.",
2017                        var->interpolation_string());
2018    }
2019
2020    var->pixel_center_integer = qual->flags.q.pixel_center_integer;
2021    var->origin_upper_left = qual->flags.q.origin_upper_left;
2022    if ((qual->flags.q.origin_upper_left || qual->flags.q.pixel_center_integer)
2023        && (strcmp(var->name, "gl_FragCoord") != 0)) {
2024       const char *const qual_string = (qual->flags.q.origin_upper_left)
2025          ? "origin_upper_left" : "pixel_center_integer";
2026
2027       _mesa_glsl_error(loc, state,
2028                        "layout qualifier `%s' can only be applied to "
2029                        "fragment shader input `gl_FragCoord'",
2030                        qual_string);
2031    }
2032
2033    if (qual->flags.q.explicit_location) {
2034       const bool global_scope = (state->current_function == NULL);
2035       bool fail = false;
2036       const char *string = "";
2037
2038       /* In the vertex shader only shader inputs can be given explicit
2039        * locations.
2040        *
2041        * In the fragment shader only shader outputs can be given explicit
2042        * locations.
2043        */
2044       switch (state->target) {
2045       case vertex_shader:
2046          if (!global_scope || (var->mode != ir_var_in)) {
2047             fail = true;
2048             string = "input";
2049          }
2050          break;
2051
2052       case geometry_shader:
2053          _mesa_glsl_error(loc, state,
2054                           "geometry shader variables cannot be given "
2055                           "explicit locations\n");
2056          break;
2057
2058       case fragment_shader:
2059          if (!global_scope || (var->mode != ir_var_out)) {
2060             fail = true;
2061             string = "output";
2062          }
2063          break;
2064       };
2065
2066       if (fail) {
2067          _mesa_glsl_error(loc, state,
2068                           "only %s shader %s variables can be given an "
2069                           "explicit location\n",
2070                           _mesa_glsl_shader_target_name(state->target),
2071                           string);
2072       } else {
2073          var->explicit_location = true;
2074
2075          /* This bit of silliness is needed because invalid explicit locations
2076           * are supposed to be flagged during linking.  Small negative values
2077           * biased by VERT_ATTRIB_GENERIC0 or FRAG_RESULT_DATA0 could alias
2078           * built-in values (e.g., -16+VERT_ATTRIB_GENERIC0 = VERT_ATTRIB_POS).
2079           * The linker needs to be able to differentiate these cases.  This
2080           * ensures that negative values stay negative.
2081           */
2082          if (qual->location >= 0) {
2083             var->location = (state->target == vertex_shader)
2084                ? (qual->location + VERT_ATTRIB_GENERIC0)
2085                : (qual->location + FRAG_RESULT_DATA0);
2086          } else {
2087             var->location = qual->location;
2088          }
2089          if (qual->flags.q.explicit_index) {
2090             var->explicit_index = true;
2091             var->index = qual->index;
2092          }
2093       }
2094    } else if (qual->flags.q.explicit_index) {
2095          _mesa_glsl_error(loc, state,
2096                           "explicit index requires explicit location\n");
2097    }
2098
2099    /* Does the declaration use the 'layout' keyword?
2100     */
2101    const bool uses_layout = qual->flags.q.pixel_center_integer
2102       || qual->flags.q.origin_upper_left
2103       || qual->flags.q.explicit_location; /* no need for index since it relies on location */
2104
2105    /* Does the declaration use the deprecated 'attribute' or 'varying'
2106     * keywords?
2107     */
2108    const bool uses_deprecated_qualifier = qual->flags.q.attribute
2109       || qual->flags.q.varying;
2110
2111    /* Is the 'layout' keyword used with parameters that allow relaxed checking.
2112     * Many implementations of GL_ARB_fragment_coord_conventions_enable and some
2113     * implementations (only Mesa?) GL_ARB_explicit_attrib_location_enable
2114     * allowed the layout qualifier to be used with 'varying' and 'attribute'.
2115     * These extensions and all following extensions that add the 'layout'
2116     * keyword have been modified to require the use of 'in' or 'out'.
2117     *
2118     * The following extension do not allow the deprecated keywords:
2119     *
2120     *    GL_AMD_conservative_depth
2121     *    GL_ARB_conservative_depth
2122     *    GL_ARB_gpu_shader5
2123     *    GL_ARB_separate_shader_objects
2124     *    GL_ARB_tesselation_shader
2125     *    GL_ARB_transform_feedback3
2126     *    GL_ARB_uniform_buffer_object
2127     *
2128     * It is unknown whether GL_EXT_shader_image_load_store or GL_NV_gpu_shader5
2129     * allow layout with the deprecated keywords.
2130     */
2131    const bool relaxed_layout_qualifier_checking =
2132       state->ARB_fragment_coord_conventions_enable;
2133
2134    if (uses_layout && uses_deprecated_qualifier) {
2135       if (relaxed_layout_qualifier_checking) {
2136          _mesa_glsl_warning(loc, state,
2137                             "`layout' qualifier may not be used with "
2138                             "`attribute' or `varying'");
2139       } else {
2140          _mesa_glsl_error(loc, state,
2141                           "`layout' qualifier may not be used with "
2142                           "`attribute' or `varying'");
2143       }
2144    }
2145
2146    /* Layout qualifiers for gl_FragDepth, which are enabled by extension
2147     * AMD_conservative_depth.
2148     */
2149    int depth_layout_count = qual->flags.q.depth_any
2150       + qual->flags.q.depth_greater
2151       + qual->flags.q.depth_less
2152       + qual->flags.q.depth_unchanged;
2153    if (depth_layout_count > 0
2154        && !state->AMD_conservative_depth_enable
2155        && !state->ARB_conservative_depth_enable) {
2156        _mesa_glsl_error(loc, state,
2157                         "extension GL_AMD_conservative_depth or "
2158                         "GL_ARB_conservative_depth must be enabled "
2159                         "to use depth layout qualifiers");
2160    } else if (depth_layout_count > 0
2161               && strcmp(var->name, "gl_FragDepth") != 0) {
2162        _mesa_glsl_error(loc, state,
2163                         "depth layout qualifiers can be applied only to "
2164                         "gl_FragDepth");
2165    } else if (depth_layout_count > 1
2166               && strcmp(var->name, "gl_FragDepth") == 0) {
2167       _mesa_glsl_error(loc, state,
2168                        "at most one depth layout qualifier can be applied to "
2169                        "gl_FragDepth");
2170    }
2171    if (qual->flags.q.depth_any)
2172       var->depth_layout = ir_depth_layout_any;
2173    else if (qual->flags.q.depth_greater)
2174       var->depth_layout = ir_depth_layout_greater;
2175    else if (qual->flags.q.depth_less)
2176       var->depth_layout = ir_depth_layout_less;
2177    else if (qual->flags.q.depth_unchanged)
2178        var->depth_layout = ir_depth_layout_unchanged;
2179    else
2180        var->depth_layout = ir_depth_layout_none;
2181
2182    if (qual->flags.q.std140 ||
2183        qual->flags.q.packed ||
2184        qual->flags.q.shared) {
2185       _mesa_glsl_error(loc, state,
2186                        "uniform block layout qualifiers std140, packed, and "
2187                        "shared can only be applied to uniform blocks, not "
2188                        "members");
2189    }
2190
2191    if (!ubo_qualifiers_valid &&
2192        (qual->flags.q.row_major || qual->flags.q.column_major)) {
2193       _mesa_glsl_error(loc, state,
2194                        "uniform block layout qualifiers row_major and "
2195                        "column_major can only be applied to uniform block "
2196                        "members");
2197    }
2198 }
2199
2200 /**
2201  * Get the variable that is being redeclared by this declaration
2202  *
2203  * Semantic checks to verify the validity of the redeclaration are also
2204  * performed.  If semantic checks fail, compilation error will be emitted via
2205  * \c _mesa_glsl_error, but a non-\c NULL pointer will still be returned.
2206  *
2207  * \returns
2208  * A pointer to an existing variable in the current scope if the declaration
2209  * is a redeclaration, \c NULL otherwise.
2210  */
2211 ir_variable *
2212 get_variable_being_redeclared(ir_variable *var, ast_declaration *decl,
2213                               struct _mesa_glsl_parse_state *state)
2214 {
2215    /* Check if this declaration is actually a re-declaration, either to
2216     * resize an array or add qualifiers to an existing variable.
2217     *
2218     * This is allowed for variables in the current scope, or when at
2219     * global scope (for built-ins in the implicit outer scope).
2220     */
2221    ir_variable *earlier = state->symbols->get_variable(decl->identifier);
2222    if (earlier == NULL ||
2223        (state->current_function != NULL &&
2224         !state->symbols->name_declared_this_scope(decl->identifier))) {
2225       return NULL;
2226    }
2227
2228
2229    YYLTYPE loc = decl->get_location();
2230
2231    /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec,
2232     *
2233     * "It is legal to declare an array without a size and then
2234     *  later re-declare the same name as an array of the same
2235     *  type and specify a size."
2236     */
2237    if ((earlier->type->array_size() == 0)
2238        && var->type->is_array()
2239        && (var->type->element_type() == earlier->type->element_type())) {
2240       /* FINISHME: This doesn't match the qualifiers on the two
2241        * FINISHME: declarations.  It's not 100% clear whether this is
2242        * FINISHME: required or not.
2243        */
2244
2245       const unsigned size = unsigned(var->type->array_size());
2246       check_builtin_array_max_size(var->name, size, loc, state);
2247       if ((size > 0) && (size <= earlier->max_array_access)) {
2248          _mesa_glsl_error(& loc, state, "array size must be > %u due to "
2249                           "previous access",
2250                           earlier->max_array_access);
2251       }
2252
2253       earlier->type = var->type;
2254       delete var;
2255       var = NULL;
2256    } else if (state->ARB_fragment_coord_conventions_enable
2257               && strcmp(var->name, "gl_FragCoord") == 0
2258               && earlier->type == var->type
2259               && earlier->mode == var->mode) {
2260       /* Allow redeclaration of gl_FragCoord for ARB_fcc layout
2261        * qualifiers.
2262        */
2263       earlier->origin_upper_left = var->origin_upper_left;
2264       earlier->pixel_center_integer = var->pixel_center_integer;
2265
2266       /* According to section 4.3.7 of the GLSL 1.30 spec,
2267        * the following built-in varaibles can be redeclared with an
2268        * interpolation qualifier:
2269        *    * gl_FrontColor
2270        *    * gl_BackColor
2271        *    * gl_FrontSecondaryColor
2272        *    * gl_BackSecondaryColor
2273        *    * gl_Color
2274        *    * gl_SecondaryColor
2275        */
2276    } else if (state->language_version >= 130
2277               && (strcmp(var->name, "gl_FrontColor") == 0
2278                   || strcmp(var->name, "gl_BackColor") == 0
2279                   || strcmp(var->name, "gl_FrontSecondaryColor") == 0
2280                   || strcmp(var->name, "gl_BackSecondaryColor") == 0
2281                   || strcmp(var->name, "gl_Color") == 0
2282                   || strcmp(var->name, "gl_SecondaryColor") == 0)
2283               && earlier->type == var->type
2284               && earlier->mode == var->mode) {
2285       earlier->interpolation = var->interpolation;
2286
2287       /* Layout qualifiers for gl_FragDepth. */
2288    } else if ((state->AMD_conservative_depth_enable ||
2289                state->ARB_conservative_depth_enable)
2290               && strcmp(var->name, "gl_FragDepth") == 0
2291               && earlier->type == var->type
2292               && earlier->mode == var->mode) {
2293
2294       /** From the AMD_conservative_depth spec:
2295        *     Within any shader, the first redeclarations of gl_FragDepth
2296        *     must appear before any use of gl_FragDepth.
2297        */
2298       if (earlier->used) {
2299          _mesa_glsl_error(&loc, state,
2300                           "the first redeclaration of gl_FragDepth "
2301                           "must appear before any use of gl_FragDepth");
2302       }
2303
2304       /* Prevent inconsistent redeclaration of depth layout qualifier. */
2305       if (earlier->depth_layout != ir_depth_layout_none
2306           && earlier->depth_layout != var->depth_layout) {
2307          _mesa_glsl_error(&loc, state,
2308                           "gl_FragDepth: depth layout is declared here "
2309                           "as '%s, but it was previously declared as "
2310                           "'%s'",
2311                           depth_layout_string(var->depth_layout),
2312                           depth_layout_string(earlier->depth_layout));
2313       }
2314
2315       earlier->depth_layout = var->depth_layout;
2316
2317    } else {
2318       _mesa_glsl_error(&loc, state, "`%s' redeclared", decl->identifier);
2319    }
2320
2321    return earlier;
2322 }
2323
2324 /**
2325  * Generate the IR for an initializer in a variable declaration
2326  */
2327 ir_rvalue *
2328 process_initializer(ir_variable *var, ast_declaration *decl,
2329                     ast_fully_specified_type *type,
2330                     exec_list *initializer_instructions,
2331                     struct _mesa_glsl_parse_state *state)
2332 {
2333    ir_rvalue *result = NULL;
2334
2335    YYLTYPE initializer_loc = decl->initializer->get_location();
2336
2337    /* From page 24 (page 30 of the PDF) of the GLSL 1.10 spec:
2338     *
2339     *    "All uniform variables are read-only and are initialized either
2340     *    directly by an application via API commands, or indirectly by
2341     *    OpenGL."
2342     */
2343    if ((state->language_version <= 110)
2344        && (var->mode == ir_var_uniform)) {
2345       _mesa_glsl_error(& initializer_loc, state,
2346                        "cannot initialize uniforms in GLSL 1.10");
2347    }
2348
2349    if (var->type->is_sampler()) {
2350       _mesa_glsl_error(& initializer_loc, state,
2351                        "cannot initialize samplers");
2352    }
2353
2354    if ((var->mode == ir_var_in) && (state->current_function == NULL)) {
2355       _mesa_glsl_error(& initializer_loc, state,
2356                        "cannot initialize %s shader input / %s",
2357                        _mesa_glsl_shader_target_name(state->target),
2358                        (state->target == vertex_shader)
2359                        ? "attribute" : "varying");
2360    }
2361
2362    ir_dereference *const lhs = new(state) ir_dereference_variable(var);
2363    ir_rvalue *rhs = decl->initializer->hir(initializer_instructions,
2364                                            state);
2365
2366    /* Calculate the constant value if this is a const or uniform
2367     * declaration.
2368     */
2369    if (type->qualifier.flags.q.constant
2370        || type->qualifier.flags.q.uniform) {
2371       ir_rvalue *new_rhs = validate_assignment(state, var->type, rhs, true);
2372       if (new_rhs != NULL) {
2373          rhs = new_rhs;
2374
2375          ir_constant *constant_value = rhs->constant_expression_value();
2376          if (!constant_value) {
2377             _mesa_glsl_error(& initializer_loc, state,
2378                              "initializer of %s variable `%s' must be a "
2379                              "constant expression",
2380                              (type->qualifier.flags.q.constant)
2381                              ? "const" : "uniform",
2382                              decl->identifier);
2383             if (var->type->is_numeric()) {
2384                /* Reduce cascading errors. */
2385                var->constant_value = ir_constant::zero(state, var->type);
2386             }
2387          } else {
2388             rhs = constant_value;
2389             var->constant_value = constant_value;
2390          }
2391       } else {
2392          _mesa_glsl_error(&initializer_loc, state,
2393                           "initializer of type %s cannot be assigned to "
2394                           "variable of type %s",
2395                           rhs->type->name, var->type->name);
2396          if (var->type->is_numeric()) {
2397             /* Reduce cascading errors. */
2398             var->constant_value = ir_constant::zero(state, var->type);
2399          }
2400       }
2401    }
2402
2403    if (rhs && !rhs->type->is_error()) {
2404       bool temp = var->read_only;
2405       if (type->qualifier.flags.q.constant)
2406          var->read_only = false;
2407
2408       /* Never emit code to initialize a uniform.
2409        */
2410       const glsl_type *initializer_type;
2411       if (!type->qualifier.flags.q.uniform) {
2412          result = do_assignment(initializer_instructions, state,
2413                                 NULL,
2414                                 lhs, rhs, true,
2415                                 type->get_location());
2416          initializer_type = result->type;
2417       } else
2418          initializer_type = rhs->type;
2419
2420       var->constant_initializer = rhs->constant_expression_value();
2421       var->has_initializer = true;
2422
2423       /* If the declared variable is an unsized array, it must inherrit
2424        * its full type from the initializer.  A declaration such as
2425        *
2426        *     uniform float a[] = float[](1.0, 2.0, 3.0, 3.0);
2427        *
2428        * becomes
2429        *
2430        *     uniform float a[4] = float[](1.0, 2.0, 3.0, 3.0);
2431        *
2432        * The assignment generated in the if-statement (below) will also
2433        * automatically handle this case for non-uniforms.
2434        *
2435        * If the declared variable is not an array, the types must
2436        * already match exactly.  As a result, the type assignment
2437        * here can be done unconditionally.  For non-uniforms the call
2438        * to do_assignment can change the type of the initializer (via
2439        * the implicit conversion rules).  For uniforms the initializer
2440        * must be a constant expression, and the type of that expression
2441        * was validated above.
2442        */
2443       var->type = initializer_type;
2444
2445       var->read_only = temp;
2446    }
2447
2448    return result;
2449 }
2450
2451 ir_rvalue *
2452 ast_declarator_list::hir(exec_list *instructions,
2453                          struct _mesa_glsl_parse_state *state)
2454 {
2455    void *ctx = state;
2456    const struct glsl_type *decl_type;
2457    const char *type_name = NULL;
2458    ir_rvalue *result = NULL;
2459    YYLTYPE loc = this->get_location();
2460
2461    /* From page 46 (page 52 of the PDF) of the GLSL 1.50 spec:
2462     *
2463     *     "To ensure that a particular output variable is invariant, it is
2464     *     necessary to use the invariant qualifier. It can either be used to
2465     *     qualify a previously declared variable as being invariant
2466     *
2467     *         invariant gl_Position; // make existing gl_Position be invariant"
2468     *
2469     * In these cases the parser will set the 'invariant' flag in the declarator
2470     * list, and the type will be NULL.
2471     */
2472    if (this->invariant) {
2473       assert(this->type == NULL);
2474
2475       if (state->current_function != NULL) {
2476          _mesa_glsl_error(& loc, state,
2477                           "All uses of `invariant' keyword must be at global "
2478                           "scope\n");
2479       }
2480
2481       foreach_list_typed (ast_declaration, decl, link, &this->declarations) {
2482          assert(!decl->is_array);
2483          assert(decl->array_size == NULL);
2484          assert(decl->initializer == NULL);
2485
2486          ir_variable *const earlier =
2487             state->symbols->get_variable(decl->identifier);
2488          if (earlier == NULL) {
2489             _mesa_glsl_error(& loc, state,
2490                              "Undeclared variable `%s' cannot be marked "
2491                              "invariant\n", decl->identifier);
2492          } else if ((state->target == vertex_shader)
2493                && (earlier->mode != ir_var_out)) {
2494             _mesa_glsl_error(& loc, state,
2495                              "`%s' cannot be marked invariant, vertex shader "
2496                              "outputs only\n", decl->identifier);
2497          } else if ((state->target == fragment_shader)
2498                && (earlier->mode != ir_var_in)) {
2499             _mesa_glsl_error(& loc, state,
2500                              "`%s' cannot be marked invariant, fragment shader "
2501                              "inputs only\n", decl->identifier);
2502          } else if (earlier->used) {
2503             _mesa_glsl_error(& loc, state,
2504                              "variable `%s' may not be redeclared "
2505                              "`invariant' after being used",
2506                              earlier->name);
2507          } else {
2508             earlier->invariant = true;
2509          }
2510       }
2511
2512       /* Invariant redeclarations do not have r-values.
2513        */
2514       return NULL;
2515    }
2516
2517    assert(this->type != NULL);
2518    assert(!this->invariant);
2519
2520    /* The type specifier may contain a structure definition.  Process that
2521     * before any of the variable declarations.
2522     */
2523    (void) this->type->specifier->hir(instructions, state);
2524
2525    decl_type = this->type->specifier->glsl_type(& type_name, state);
2526    if (this->declarations.is_empty()) {
2527       /* If there is no structure involved in the program text, there are two
2528        * possible scenarios:
2529        *
2530        * - The program text contained something like 'vec4;'.  This is an
2531        *   empty declaration.  It is valid but weird.  Emit a warning.
2532        *
2533        * - The program text contained something like 'S;' and 'S' is not the
2534        *   name of a known structure type.  This is both invalid and weird.
2535        *   Emit an error.
2536        *
2537        * Note that if decl_type is NULL and there is a structure involved,
2538        * there must have been some sort of error with the structure.  In this
2539        * case we assume that an error was already generated on this line of
2540        * code for the structure.  There is no need to generate an additional,
2541        * confusing error.
2542        */
2543       assert(this->type->specifier->structure == NULL || decl_type != NULL
2544              || state->error);
2545       if (this->type->specifier->structure == NULL) {
2546          if (decl_type != NULL) {
2547             _mesa_glsl_warning(&loc, state, "empty declaration");
2548          } else {
2549             _mesa_glsl_error(&loc, state,
2550                              "invalid type `%s' in empty declaration",
2551                              type_name);
2552          }
2553       }
2554    }
2555
2556    foreach_list_typed (ast_declaration, decl, link, &this->declarations) {
2557       const struct glsl_type *var_type;
2558       ir_variable *var;
2559
2560       /* FINISHME: Emit a warning if a variable declaration shadows a
2561        * FINISHME: declaration at a higher scope.
2562        */
2563
2564       if ((decl_type == NULL) || decl_type->is_void()) {
2565          if (type_name != NULL) {
2566             _mesa_glsl_error(& loc, state,
2567                              "invalid type `%s' in declaration of `%s'",
2568                              type_name, decl->identifier);
2569          } else {
2570             _mesa_glsl_error(& loc, state,
2571                              "invalid type in declaration of `%s'",
2572                              decl->identifier);
2573          }
2574          continue;
2575       }
2576
2577       if (decl->is_array) {
2578          var_type = process_array_type(&loc, decl_type, decl->array_size,
2579                                        state);
2580          if (var_type->is_error())
2581             continue;
2582       } else {
2583          var_type = decl_type;
2584       }
2585
2586       var = new(ctx) ir_variable(var_type, decl->identifier, ir_var_auto);
2587
2588       /* From page 22 (page 28 of the PDF) of the GLSL 1.10 specification;
2589        *
2590        *     "Global variables can only use the qualifiers const,
2591        *     attribute, uni form, or varying. Only one may be
2592        *     specified.
2593        *
2594        *     Local variables can only use the qualifier const."
2595        *
2596        * This is relaxed in GLSL 1.30.  It is also relaxed by any extension
2597        * that adds the 'layout' keyword.
2598        */
2599       if ((state->language_version < 130)
2600           && !state->ARB_explicit_attrib_location_enable
2601           && !state->ARB_fragment_coord_conventions_enable) {
2602          if (this->type->qualifier.flags.q.out) {
2603             _mesa_glsl_error(& loc, state,
2604                              "`out' qualifier in declaration of `%s' "
2605                              "only valid for function parameters in %s.",
2606                              decl->identifier, state->version_string);
2607          }
2608          if (this->type->qualifier.flags.q.in) {
2609             _mesa_glsl_error(& loc, state,
2610                              "`in' qualifier in declaration of `%s' "
2611                              "only valid for function parameters in %s.",
2612                              decl->identifier, state->version_string);
2613          }
2614          /* FINISHME: Test for other invalid qualifiers. */
2615       }
2616
2617       apply_type_qualifier_to_variable(& this->type->qualifier, var, state,
2618                                        & loc, this->ubo_qualifiers_valid);
2619
2620       if (this->type->qualifier.flags.q.invariant) {
2621          if ((state->target == vertex_shader) && !(var->mode == ir_var_out ||
2622                                                    var->mode == ir_var_inout)) {
2623             /* FINISHME: Note that this doesn't work for invariant on
2624              * a function signature outval
2625              */
2626             _mesa_glsl_error(& loc, state,
2627                              "`%s' cannot be marked invariant, vertex shader "
2628                              "outputs only\n", var->name);
2629          } else if ((state->target == fragment_shader) &&
2630                     !(var->mode == ir_var_in || var->mode == ir_var_inout)) {
2631             /* FINISHME: Note that this doesn't work for invariant on
2632              * a function signature inval
2633              */
2634             _mesa_glsl_error(& loc, state,
2635                              "`%s' cannot be marked invariant, fragment shader "
2636                              "inputs only\n", var->name);
2637          }
2638       }
2639
2640       if (state->current_function != NULL) {
2641          const char *mode = NULL;
2642          const char *extra = "";
2643
2644          /* There is no need to check for 'inout' here because the parser will
2645           * only allow that in function parameter lists.
2646           */
2647          if (this->type->qualifier.flags.q.attribute) {
2648             mode = "attribute";
2649          } else if (this->type->qualifier.flags.q.uniform) {
2650             mode = "uniform";
2651          } else if (this->type->qualifier.flags.q.varying) {
2652             mode = "varying";
2653          } else if (this->type->qualifier.flags.q.in) {
2654             mode = "in";
2655             extra = " or in function parameter list";
2656          } else if (this->type->qualifier.flags.q.out) {
2657             mode = "out";
2658             extra = " or in function parameter list";
2659          }
2660
2661          if (mode) {
2662             _mesa_glsl_error(& loc, state,
2663                              "%s variable `%s' must be declared at "
2664                              "global scope%s",
2665                              mode, var->name, extra);
2666          }
2667       } else if (var->mode == ir_var_in) {
2668          var->read_only = true;
2669
2670          if (state->target == vertex_shader) {
2671             bool error_emitted = false;
2672
2673             /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec:
2674              *
2675              *    "Vertex shader inputs can only be float, floating-point
2676              *    vectors, matrices, signed and unsigned integers and integer
2677              *    vectors. Vertex shader inputs can also form arrays of these
2678              *    types, but not structures."
2679              *
2680              * From page 31 (page 27 of the PDF) of the GLSL 1.30 spec:
2681              *
2682              *    "Vertex shader inputs can only be float, floating-point
2683              *    vectors, matrices, signed and unsigned integers and integer
2684              *    vectors. They cannot be arrays or structures."
2685              *
2686              * From page 23 (page 29 of the PDF) of the GLSL 1.20 spec:
2687              *
2688              *    "The attribute qualifier can be used only with float,
2689              *    floating-point vectors, and matrices. Attribute variables
2690              *    cannot be declared as arrays or structures."
2691              */
2692             const glsl_type *check_type = var->type->is_array()
2693                ? var->type->fields.array : var->type;
2694
2695             switch (check_type->base_type) {
2696             case GLSL_TYPE_FLOAT:
2697                break;
2698             case GLSL_TYPE_UINT:
2699             case GLSL_TYPE_INT:
2700                if (state->language_version > 120)
2701                   break;
2702                /* FALLTHROUGH */
2703             default:
2704                _mesa_glsl_error(& loc, state,
2705                                 "vertex shader input / attribute cannot have "
2706                                 "type %s`%s'",
2707                                 var->type->is_array() ? "array of " : "",
2708                                 check_type->name);
2709                error_emitted = true;
2710             }
2711
2712             if (!error_emitted && (state->language_version <= 130)
2713                 && var->type->is_array()) {
2714                _mesa_glsl_error(& loc, state,
2715                                 "vertex shader input / attribute cannot have "
2716                                 "array type");
2717                error_emitted = true;
2718             }
2719          }
2720       }
2721
2722       /* Integer vertex outputs must be qualified with 'flat'.
2723        *
2724        * From section 4.3.6 of the GLSL 1.30 spec:
2725        *    "If a vertex output is a signed or unsigned integer or integer
2726        *    vector, then it must be qualified with the interpolation qualifier
2727        *    flat."
2728        */
2729       if (state->language_version >= 130
2730           && state->target == vertex_shader
2731           && state->current_function == NULL
2732           && var->type->is_integer()
2733           && var->mode == ir_var_out
2734           && var->interpolation != INTERP_QUALIFIER_FLAT) {
2735
2736          _mesa_glsl_error(&loc, state, "If a vertex output is an integer, "
2737                           "then it must be qualified with 'flat'");
2738       }
2739
2740
2741       /* Interpolation qualifiers cannot be applied to 'centroid' and
2742        * 'centroid varying'.
2743        *
2744        * From page 29 (page 35 of the PDF) of the GLSL 1.30 spec:
2745        *    "interpolation qualifiers may only precede the qualifiers in,
2746        *    centroid in, out, or centroid out in a declaration. They do not apply
2747        *    to the deprecated storage qualifiers varying or centroid varying."
2748        */
2749       if (state->language_version >= 130
2750           && this->type->qualifier.has_interpolation()
2751           && this->type->qualifier.flags.q.varying) {
2752
2753          const char *i = this->type->qualifier.interpolation_string();
2754          assert(i != NULL);
2755          const char *s;
2756          if (this->type->qualifier.flags.q.centroid)
2757             s = "centroid varying";
2758          else
2759             s = "varying";
2760
2761          _mesa_glsl_error(&loc, state,
2762                           "qualifier '%s' cannot be applied to the "
2763                           "deprecated storage qualifier '%s'", i, s);
2764       }
2765
2766
2767       /* Interpolation qualifiers can only apply to vertex shader outputs and
2768        * fragment shader inputs.
2769        *
2770        * From page 29 (page 35 of the PDF) of the GLSL 1.30 spec:
2771        *    "Outputs from a vertex shader (out) and inputs to a fragment
2772        *    shader (in) can be further qualified with one or more of these
2773        *    interpolation qualifiers"
2774        */
2775       if (state->language_version >= 130
2776           && this->type->qualifier.has_interpolation()) {
2777
2778          const char *i = this->type->qualifier.interpolation_string();
2779          assert(i != NULL);
2780
2781          switch (state->target) {
2782          case vertex_shader:
2783             if (this->type->qualifier.flags.q.in) {
2784                _mesa_glsl_error(&loc, state,
2785                                 "qualifier '%s' cannot be applied to vertex "
2786                                 "shader inputs", i);
2787             }
2788             break;
2789          case fragment_shader:
2790             if (this->type->qualifier.flags.q.out) {
2791                _mesa_glsl_error(&loc, state,
2792                                 "qualifier '%s' cannot be applied to fragment "
2793                                 "shader outputs", i);
2794             }
2795             break;
2796          default:
2797             assert(0);
2798          }
2799       }
2800
2801
2802       /* From section 4.3.4 of the GLSL 1.30 spec:
2803        *    "It is an error to use centroid in in a vertex shader."
2804        */
2805       if (state->language_version >= 130
2806           && this->type->qualifier.flags.q.centroid
2807           && this->type->qualifier.flags.q.in
2808           && state->target == vertex_shader) {
2809
2810          _mesa_glsl_error(&loc, state,
2811                           "'centroid in' cannot be used in a vertex shader");
2812       }
2813
2814
2815       /* Precision qualifiers exists only in GLSL versions 1.00 and >= 1.30.
2816        */
2817       if (this->type->specifier->precision != ast_precision_none
2818           && state->language_version != 100
2819           && state->language_version < 130) {
2820
2821          _mesa_glsl_error(&loc, state,
2822                           "precision qualifiers are supported only in GLSL ES "
2823                           "1.00, and GLSL 1.30 and later");
2824       }
2825
2826
2827       /* Precision qualifiers only apply to floating point and integer types.
2828        *
2829        * From section 4.5.2 of the GLSL 1.30 spec:
2830        *    "Any floating point or any integer declaration can have the type
2831        *    preceded by one of these precision qualifiers [...] Literal
2832        *    constants do not have precision qualifiers. Neither do Boolean
2833        *    variables.
2834        *
2835        * In GLSL ES, sampler types are also allowed.
2836        *
2837        * From page 87 of the GLSL ES spec:
2838        *    "RESOLUTION: Allow sampler types to take a precision qualifier."
2839        */
2840       if (this->type->specifier->precision != ast_precision_none
2841           && !var->type->is_float()
2842           && !var->type->is_integer()
2843           && !(var->type->is_sampler() && state->es_shader)
2844           && !(var->type->is_array()
2845                && (var->type->fields.array->is_float()
2846                    || var->type->fields.array->is_integer()))) {
2847
2848          _mesa_glsl_error(&loc, state,
2849                           "precision qualifiers apply only to floating point"
2850                           "%s types", state->es_shader ? ", integer, and sampler"
2851                                                        : "and integer");
2852       }
2853
2854       /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
2855        *
2856        *    "[Sampler types] can only be declared as function
2857        *    parameters or uniform variables (see Section 4.3.5
2858        *    "Uniform")".
2859        */
2860       if (var_type->contains_sampler() &&
2861           !this->type->qualifier.flags.q.uniform) {
2862          _mesa_glsl_error(&loc, state, "samplers must be declared uniform");
2863       }
2864
2865       /* Process the initializer and add its instructions to a temporary
2866        * list.  This list will be added to the instruction stream (below) after
2867        * the declaration is added.  This is done because in some cases (such as
2868        * redeclarations) the declaration may not actually be added to the
2869        * instruction stream.
2870        */
2871       exec_list initializer_instructions;
2872       ir_variable *earlier = get_variable_being_redeclared(var, decl, state);
2873
2874       if (decl->initializer != NULL) {
2875          result = process_initializer((earlier == NULL) ? var : earlier,
2876                                       decl, this->type,
2877                                       &initializer_instructions, state);
2878       }
2879
2880       /* From page 23 (page 29 of the PDF) of the GLSL 1.10 spec:
2881        *
2882        *     "It is an error to write to a const variable outside of
2883        *      its declaration, so they must be initialized when
2884        *      declared."
2885        */
2886       if (this->type->qualifier.flags.q.constant && decl->initializer == NULL) {
2887          _mesa_glsl_error(& loc, state,
2888                           "const declaration of `%s' must be initialized",
2889                           decl->identifier);
2890       }
2891
2892       /* If the declaration is not a redeclaration, there are a few additional
2893        * semantic checks that must be applied.  In addition, variable that was
2894        * created for the declaration should be added to the IR stream.
2895        */
2896       if (earlier == NULL) {
2897          /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
2898           *
2899           *   "Identifiers starting with "gl_" are reserved for use by
2900           *   OpenGL, and may not be declared in a shader as either a
2901           *   variable or a function."
2902           */
2903          if (strncmp(decl->identifier, "gl_", 3) == 0)
2904             _mesa_glsl_error(& loc, state,
2905                              "identifier `%s' uses reserved `gl_' prefix",
2906                              decl->identifier);
2907          else if (strstr(decl->identifier, "__")) {
2908             /* From page 14 (page 20 of the PDF) of the GLSL 1.10
2909              * spec:
2910              *
2911              *     "In addition, all identifiers containing two
2912              *      consecutive underscores (__) are reserved as
2913              *      possible future keywords."
2914              */
2915             _mesa_glsl_error(& loc, state,
2916                              "identifier `%s' uses reserved `__' string",
2917                              decl->identifier);
2918          }
2919
2920          /* Add the variable to the symbol table.  Note that the initializer's
2921           * IR was already processed earlier (though it hasn't been emitted
2922           * yet), without the variable in scope.
2923           *
2924           * This differs from most C-like languages, but it follows the GLSL
2925           * specification.  From page 28 (page 34 of the PDF) of the GLSL 1.50
2926           * spec:
2927           *
2928           *     "Within a declaration, the scope of a name starts immediately
2929           *     after the initializer if present or immediately after the name
2930           *     being declared if not."
2931           */
2932          if (!state->symbols->add_variable(var)) {
2933             YYLTYPE loc = this->get_location();
2934             _mesa_glsl_error(&loc, state, "name `%s' already taken in the "
2935                              "current scope", decl->identifier);
2936             continue;
2937          }
2938
2939          /* Push the variable declaration to the top.  It means that all the
2940           * variable declarations will appear in a funny last-to-first order,
2941           * but otherwise we run into trouble if a function is prototyped, a
2942           * global var is decled, then the function is defined with usage of
2943           * the global var.  See glslparsertest's CorrectModule.frag.
2944           */
2945          instructions->push_head(var);
2946       }
2947
2948       instructions->append_list(&initializer_instructions);
2949    }
2950
2951
2952    /* Generally, variable declarations do not have r-values.  However,
2953     * one is used for the declaration in
2954     *
2955     * while (bool b = some_condition()) {
2956     *   ...
2957     * }
2958     *
2959     * so we return the rvalue from the last seen declaration here.
2960     */
2961    return result;
2962 }
2963
2964
2965 ir_rvalue *
2966 ast_parameter_declarator::hir(exec_list *instructions,
2967                               struct _mesa_glsl_parse_state *state)
2968 {
2969    void *ctx = state;
2970    const struct glsl_type *type;
2971    const char *name = NULL;
2972    YYLTYPE loc = this->get_location();
2973
2974    type = this->type->specifier->glsl_type(& name, state);
2975
2976    if (type == NULL) {
2977       if (name != NULL) {
2978          _mesa_glsl_error(& loc, state,
2979                           "invalid type `%s' in declaration of `%s'",
2980                           name, this->identifier);
2981       } else {
2982          _mesa_glsl_error(& loc, state,
2983                           "invalid type in declaration of `%s'",
2984                           this->identifier);
2985       }
2986
2987       type = glsl_type::error_type;
2988    }
2989
2990    /* From page 62 (page 68 of the PDF) of the GLSL 1.50 spec:
2991     *
2992     *    "Functions that accept no input arguments need not use void in the
2993     *    argument list because prototypes (or definitions) are required and
2994     *    therefore there is no ambiguity when an empty argument list "( )" is
2995     *    declared. The idiom "(void)" as a parameter list is provided for
2996     *    convenience."
2997     *
2998     * Placing this check here prevents a void parameter being set up
2999     * for a function, which avoids tripping up checks for main taking
3000     * parameters and lookups of an unnamed symbol.
3001     */
3002    if (type->is_void()) {
3003       if (this->identifier != NULL)
3004          _mesa_glsl_error(& loc, state,
3005                           "named parameter cannot have type `void'");
3006
3007       is_void = true;
3008       return NULL;
3009    }
3010
3011    if (formal_parameter && (this->identifier == NULL)) {
3012       _mesa_glsl_error(& loc, state, "formal parameter lacks a name");
3013       return NULL;
3014    }
3015
3016    /* This only handles "vec4 foo[..]".  The earlier specifier->glsl_type(...)
3017     * call already handled the "vec4[..] foo" case.
3018     */
3019    if (this->is_array) {
3020       type = process_array_type(&loc, type, this->array_size, state);
3021    }
3022
3023    if (!type->is_error() && type->array_size() == 0) {
3024       _mesa_glsl_error(&loc, state, "arrays passed as parameters must have "
3025                        "a declared size.");
3026       type = glsl_type::error_type;
3027    }
3028
3029    is_void = false;
3030    ir_variable *var = new(ctx) ir_variable(type, this->identifier, ir_var_in);
3031
3032    /* Apply any specified qualifiers to the parameter declaration.  Note that
3033     * for function parameters the default mode is 'in'.
3034     */
3035    apply_type_qualifier_to_variable(& this->type->qualifier, var, state, & loc,
3036                                     false);
3037
3038    /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
3039     *
3040     *    "Samplers cannot be treated as l-values; hence cannot be used
3041     *    as out or inout function parameters, nor can they be assigned
3042     *    into."
3043     */
3044    if ((var->mode == ir_var_inout || var->mode == ir_var_out)
3045        && type->contains_sampler()) {
3046       _mesa_glsl_error(&loc, state, "out and inout parameters cannot contain samplers");
3047       type = glsl_type::error_type;
3048    }
3049
3050    /* From page 39 (page 45 of the PDF) of the GLSL 1.10 spec:
3051     *
3052     *    "When calling a function, expressions that do not evaluate to
3053     *     l-values cannot be passed to parameters declared as out or inout."
3054     *
3055     * From page 32 (page 38 of the PDF) of the GLSL 1.10 spec:
3056     *
3057     *    "Other binary or unary expressions, non-dereferenced arrays,
3058     *     function names, swizzles with repeated fields, and constants
3059     *     cannot be l-values."
3060     *
3061     * So for GLSL 1.10, passing an array as an out or inout parameter is not
3062     * allowed.  This restriction is removed in GLSL 1.20, and in GLSL ES.
3063     */
3064    if ((var->mode == ir_var_inout || var->mode == ir_var_out)
3065        && type->is_array() && state->language_version == 110) {
3066       _mesa_glsl_error(&loc, state, "Arrays cannot be out or inout parameters in GLSL 1.10");
3067       type = glsl_type::error_type;
3068    }
3069
3070    instructions->push_tail(var);
3071
3072    /* Parameter declarations do not have r-values.
3073     */
3074    return NULL;
3075 }
3076
3077
3078 void
3079 ast_parameter_declarator::parameters_to_hir(exec_list *ast_parameters,
3080                                             bool formal,
3081                                             exec_list *ir_parameters,
3082                                             _mesa_glsl_parse_state *state)
3083 {
3084    ast_parameter_declarator *void_param = NULL;
3085    unsigned count = 0;
3086
3087    foreach_list_typed (ast_parameter_declarator, param, link, ast_parameters) {
3088       param->formal_parameter = formal;
3089       param->hir(ir_parameters, state);
3090
3091       if (param->is_void)
3092          void_param = param;
3093
3094       count++;
3095    }
3096
3097    if ((void_param != NULL) && (count > 1)) {
3098       YYLTYPE loc = void_param->get_location();
3099
3100       _mesa_glsl_error(& loc, state,
3101                        "`void' parameter must be only parameter");
3102    }
3103 }
3104
3105
3106 void
3107 emit_function(_mesa_glsl_parse_state *state, ir_function *f)
3108 {
3109    /* IR invariants disallow function declarations or definitions
3110     * nested within other function definitions.  But there is no
3111     * requirement about the relative order of function declarations
3112     * and definitions with respect to one another.  So simply insert
3113     * the new ir_function block at the end of the toplevel instruction
3114     * list.
3115     */
3116    state->toplevel_ir->push_tail(f);
3117 }
3118
3119
3120 ir_rvalue *
3121 ast_function::hir(exec_list *instructions,
3122                   struct _mesa_glsl_parse_state *state)
3123 {
3124    void *ctx = state;
3125    ir_function *f = NULL;
3126    ir_function_signature *sig = NULL;
3127    exec_list hir_parameters;
3128
3129    const char *const name = identifier;
3130
3131    /* New functions are always added to the top-level IR instruction stream,
3132     * so this instruction list pointer is ignored.  See also emit_function
3133     * (called below).
3134     */
3135    (void) instructions;
3136
3137    /* From page 21 (page 27 of the PDF) of the GLSL 1.20 spec,
3138     *
3139     *   "Function declarations (prototypes) cannot occur inside of functions;
3140     *   they must be at global scope, or for the built-in functions, outside
3141     *   the global scope."
3142     *
3143     * From page 27 (page 33 of the PDF) of the GLSL ES 1.00.16 spec,
3144     *
3145     *   "User defined functions may only be defined within the global scope."
3146     *
3147     * Note that this language does not appear in GLSL 1.10.
3148     */
3149    if ((state->current_function != NULL) && (state->language_version != 110)) {
3150       YYLTYPE loc = this->get_location();
3151       _mesa_glsl_error(&loc, state,
3152                        "declaration of function `%s' not allowed within "
3153                        "function body", name);
3154    }
3155
3156    /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
3157     *
3158     *   "Identifiers starting with "gl_" are reserved for use by
3159     *   OpenGL, and may not be declared in a shader as either a
3160     *   variable or a function."
3161     */
3162    if (strncmp(name, "gl_", 3) == 0) {
3163       YYLTYPE loc = this->get_location();
3164       _mesa_glsl_error(&loc, state,
3165                        "identifier `%s' uses reserved `gl_' prefix", name);
3166    }
3167
3168    /* Convert the list of function parameters to HIR now so that they can be
3169     * used below to compare this function's signature with previously seen
3170     * signatures for functions with the same name.
3171     */
3172    ast_parameter_declarator::parameters_to_hir(& this->parameters,
3173                                                is_definition,
3174                                                & hir_parameters, state);
3175
3176    const char *return_type_name;
3177    const glsl_type *return_type =
3178       this->return_type->specifier->glsl_type(& return_type_name, state);
3179
3180    if (!return_type) {
3181       YYLTYPE loc = this->get_location();
3182       _mesa_glsl_error(&loc, state,
3183                        "function `%s' has undeclared return type `%s'",
3184                        name, return_type_name);
3185       return_type = glsl_type::error_type;
3186    }
3187
3188    /* From page 56 (page 62 of the PDF) of the GLSL 1.30 spec:
3189     * "No qualifier is allowed on the return type of a function."
3190     */
3191    if (this->return_type->has_qualifiers()) {
3192       YYLTYPE loc = this->get_location();
3193       _mesa_glsl_error(& loc, state,
3194                        "function `%s' return type has qualifiers", name);
3195    }
3196
3197    /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
3198     *
3199     *    "[Sampler types] can only be declared as function parameters
3200     *    or uniform variables (see Section 4.3.5 "Uniform")".
3201     */
3202    if (return_type->contains_sampler()) {
3203       YYLTYPE loc = this->get_location();
3204       _mesa_glsl_error(&loc, state,
3205                        "function `%s' return type can't contain a sampler",
3206                        name);
3207    }
3208
3209    /* Verify that this function's signature either doesn't match a previously
3210     * seen signature for a function with the same name, or, if a match is found,
3211     * that the previously seen signature does not have an associated definition.
3212     */
3213    f = state->symbols->get_function(name);
3214    if (f != NULL && (state->es_shader || f->has_user_signature())) {
3215       sig = f->exact_matching_signature(&hir_parameters);
3216       if (sig != NULL) {
3217          const char *badvar = sig->qualifiers_match(&hir_parameters);
3218          if (badvar != NULL) {
3219             YYLTYPE loc = this->get_location();
3220
3221             _mesa_glsl_error(&loc, state, "function `%s' parameter `%s' "
3222                              "qualifiers don't match prototype", name, badvar);
3223          }
3224
3225          if (sig->return_type != return_type) {
3226             YYLTYPE loc = this->get_location();
3227
3228             _mesa_glsl_error(&loc, state, "function `%s' return type doesn't "
3229                              "match prototype", name);
3230          }
3231
3232          if (is_definition && sig->is_defined) {
3233             YYLTYPE loc = this->get_location();
3234
3235             _mesa_glsl_error(& loc, state, "function `%s' redefined", name);
3236          }
3237       }
3238    } else {
3239       f = new(ctx) ir_function(name);
3240       if (!state->symbols->add_function(f)) {
3241          /* This function name shadows a non-function use of the same name. */
3242          YYLTYPE loc = this->get_location();
3243
3244          _mesa_glsl_error(&loc, state, "function name `%s' conflicts with "
3245                           "non-function", name);
3246          return NULL;
3247       }
3248
3249       emit_function(state, f);
3250    }
3251
3252    /* Verify the return type of main() */
3253    if (strcmp(name, "main") == 0) {
3254       if (! return_type->is_void()) {
3255          YYLTYPE loc = this->get_location();
3256
3257          _mesa_glsl_error(& loc, state, "main() must return void");
3258       }
3259
3260       if (!hir_parameters.is_empty()) {
3261          YYLTYPE loc = this->get_location();
3262
3263          _mesa_glsl_error(& loc, state, "main() must not take any parameters");
3264       }
3265    }
3266
3267    /* Finish storing the information about this new function in its signature.
3268     */
3269    if (sig == NULL) {
3270       sig = new(ctx) ir_function_signature(return_type);
3271       f->add_signature(sig);
3272    }
3273
3274    sig->replace_parameters(&hir_parameters);
3275    signature = sig;
3276
3277    /* Function declarations (prototypes) do not have r-values.
3278     */
3279    return NULL;
3280 }
3281
3282
3283 ir_rvalue *
3284 ast_function_definition::hir(exec_list *instructions,
3285                              struct _mesa_glsl_parse_state *state)
3286 {
3287    prototype->is_definition = true;
3288    prototype->hir(instructions, state);
3289
3290    ir_function_signature *signature = prototype->signature;
3291    if (signature == NULL)
3292       return NULL;
3293
3294    assert(state->current_function == NULL);
3295    state->current_function = signature;
3296    state->found_return = false;
3297
3298    /* Duplicate parameters declared in the prototype as concrete variables.
3299     * Add these to the symbol table.
3300     */
3301    state->symbols->push_scope();
3302    foreach_iter(exec_list_iterator, iter, signature->parameters) {
3303       ir_variable *const var = ((ir_instruction *) iter.get())->as_variable();
3304
3305       assert(var != NULL);
3306
3307       /* The only way a parameter would "exist" is if two parameters have
3308        * the same name.
3309        */
3310       if (state->symbols->name_declared_this_scope(var->name)) {
3311          YYLTYPE loc = this->get_location();
3312
3313          _mesa_glsl_error(& loc, state, "parameter `%s' redeclared", var->name);
3314       } else {
3315          state->symbols->add_variable(var);
3316       }
3317    }
3318
3319    /* Convert the body of the function to HIR. */
3320    this->body->hir(&signature->body, state);
3321    signature->is_defined = true;
3322
3323    state->symbols->pop_scope();
3324
3325    assert(state->current_function == signature);
3326    state->current_function = NULL;
3327
3328    if (!signature->return_type->is_void() && !state->found_return) {
3329       YYLTYPE loc = this->get_location();
3330       _mesa_glsl_error(& loc, state, "function `%s' has non-void return type "
3331                        "%s, but no return statement",
3332                        signature->function_name(),
3333                        signature->return_type->name);
3334    }
3335
3336    /* Function definitions do not have r-values.
3337     */
3338    return NULL;
3339 }
3340
3341
3342 ir_rvalue *
3343 ast_jump_statement::hir(exec_list *instructions,
3344                         struct _mesa_glsl_parse_state *state)
3345 {
3346    void *ctx = state;
3347
3348    switch (mode) {
3349    case ast_return: {
3350       ir_return *inst;
3351       assert(state->current_function);
3352
3353       if (opt_return_value) {
3354          ir_rvalue *const ret = opt_return_value->hir(instructions, state);
3355
3356          /* The value of the return type can be NULL if the shader says
3357           * 'return foo();' and foo() is a function that returns void.
3358           *
3359           * NOTE: The GLSL spec doesn't say that this is an error.  The type
3360           * of the return value is void.  If the return type of the function is
3361           * also void, then this should compile without error.  Seriously.
3362           */
3363          const glsl_type *const ret_type =
3364             (ret == NULL) ? glsl_type::void_type : ret->type;
3365
3366          /* Implicit conversions are not allowed for return values. */
3367          if (state->current_function->return_type != ret_type) {
3368             YYLTYPE loc = this->get_location();
3369
3370             _mesa_glsl_error(& loc, state,
3371                              "`return' with wrong type %s, in function `%s' "
3372                              "returning %s",
3373                              ret_type->name,
3374                              state->current_function->function_name(),
3375                              state->current_function->return_type->name);
3376          }
3377
3378          inst = new(ctx) ir_return(ret);
3379       } else {
3380          if (state->current_function->return_type->base_type !=
3381              GLSL_TYPE_VOID) {
3382             YYLTYPE loc = this->get_location();
3383
3384             _mesa_glsl_error(& loc, state,
3385                              "`return' with no value, in function %s returning "
3386                              "non-void",
3387                              state->current_function->function_name());
3388          }
3389          inst = new(ctx) ir_return;
3390       }
3391
3392       state->found_return = true;
3393       instructions->push_tail(inst);
3394       break;
3395    }
3396
3397    case ast_discard:
3398       if (state->target != fragment_shader) {
3399          YYLTYPE loc = this->get_location();
3400
3401          _mesa_glsl_error(& loc, state,
3402                           "`discard' may only appear in a fragment shader");
3403       }
3404       instructions->push_tail(new(ctx) ir_discard);
3405       break;
3406
3407    case ast_break:
3408    case ast_continue:
3409       if (mode == ast_continue &&
3410           state->loop_nesting_ast == NULL) {
3411          YYLTYPE loc = this->get_location();
3412
3413          _mesa_glsl_error(& loc, state,
3414                           "continue may only appear in a loop");
3415       } else if (mode == ast_break &&
3416                  state->loop_nesting_ast == NULL &&
3417                  state->switch_state.switch_nesting_ast == NULL) {
3418          YYLTYPE loc = this->get_location();
3419
3420          _mesa_glsl_error(& loc, state,
3421                           "break may only appear in a loop or a switch");
3422       } else {
3423          /* For a loop, inline the for loop expression again,
3424           * since we don't know where near the end of
3425           * the loop body the normal copy of it
3426           * is going to be placed.
3427           */
3428          if (state->loop_nesting_ast != NULL &&
3429              mode == ast_continue &&
3430              state->loop_nesting_ast->rest_expression) {
3431             state->loop_nesting_ast->rest_expression->hir(instructions,
3432                                                           state);
3433          }
3434
3435          if (state->switch_state.is_switch_innermost &&
3436              mode == ast_break) {
3437             /* Force break out of switch by setting is_break switch state.
3438              */
3439             ir_variable *const is_break_var = state->switch_state.is_break_var;
3440             ir_dereference_variable *const deref_is_break_var =
3441                new(ctx) ir_dereference_variable(is_break_var);
3442             ir_constant *const true_val = new(ctx) ir_constant(true);
3443             ir_assignment *const set_break_var =
3444                new(ctx) ir_assignment(deref_is_break_var, true_val);
3445             
3446             instructions->push_tail(set_break_var);
3447          }
3448          else {
3449             ir_loop_jump *const jump = 
3450                new(ctx) ir_loop_jump((mode == ast_break)
3451                                      ? ir_loop_jump::jump_break
3452                                      : ir_loop_jump::jump_continue);
3453             instructions->push_tail(jump);
3454          }
3455       }
3456
3457       break;
3458    }
3459
3460    /* Jump instructions do not have r-values.
3461     */
3462    return NULL;
3463 }
3464
3465
3466 ir_rvalue *
3467 ast_selection_statement::hir(exec_list *instructions,
3468                              struct _mesa_glsl_parse_state *state)
3469 {
3470    void *ctx = state;
3471
3472    ir_rvalue *const condition = this->condition->hir(instructions, state);
3473
3474    /* From page 66 (page 72 of the PDF) of the GLSL 1.50 spec:
3475     *
3476     *    "Any expression whose type evaluates to a Boolean can be used as the
3477     *    conditional expression bool-expression. Vector types are not accepted
3478     *    as the expression to if."
3479     *
3480     * The checks are separated so that higher quality diagnostics can be
3481     * generated for cases where both rules are violated.
3482     */
3483    if (!condition->type->is_boolean() || !condition->type->is_scalar()) {
3484       YYLTYPE loc = this->condition->get_location();
3485
3486       _mesa_glsl_error(& loc, state, "if-statement condition must be scalar "
3487                        "boolean");
3488    }
3489
3490    ir_if *const stmt = new(ctx) ir_if(condition);
3491
3492    if (then_statement != NULL) {
3493       state->symbols->push_scope();
3494       then_statement->hir(& stmt->then_instructions, state);
3495       state->symbols->pop_scope();
3496    }
3497
3498    if (else_statement != NULL) {
3499       state->symbols->push_scope();
3500       else_statement->hir(& stmt->else_instructions, state);
3501       state->symbols->pop_scope();
3502    }
3503
3504    instructions->push_tail(stmt);
3505
3506    /* if-statements do not have r-values.
3507     */
3508    return NULL;
3509 }
3510
3511
3512 ir_rvalue *
3513 ast_switch_statement::hir(exec_list *instructions,
3514                           struct _mesa_glsl_parse_state *state)
3515 {
3516    void *ctx = state;
3517
3518    ir_rvalue *const test_expression =
3519       this->test_expression->hir(instructions, state);
3520
3521    /* From page 66 (page 55 of the PDF) of the GLSL 1.50 spec:
3522     *
3523     *    "The type of init-expression in a switch statement must be a 
3524     *     scalar integer." 
3525     */
3526    if (!test_expression->type->is_scalar() ||
3527        !test_expression->type->is_integer()) {
3528       YYLTYPE loc = this->test_expression->get_location();
3529
3530       _mesa_glsl_error(& loc,
3531                        state,
3532                        "switch-statement expression must be scalar "
3533                        "integer");
3534    }
3535
3536    /* Track the switch-statement nesting in a stack-like manner.
3537     */
3538    struct glsl_switch_state saved = state->switch_state;
3539
3540    state->switch_state.is_switch_innermost = true;
3541    state->switch_state.switch_nesting_ast = this;
3542    state->switch_state.labels_ht = hash_table_ctor(0, hash_table_pointer_hash,
3543                                                    hash_table_pointer_compare);
3544    state->switch_state.previous_default = NULL;
3545
3546    /* Initalize is_fallthru state to false.
3547     */
3548    ir_rvalue *const is_fallthru_val = new (ctx) ir_constant(false);
3549    state->switch_state.is_fallthru_var =
3550       new(ctx) ir_variable(glsl_type::bool_type,
3551                            "switch_is_fallthru_tmp",
3552                            ir_var_temporary);
3553    instructions->push_tail(state->switch_state.is_fallthru_var);
3554
3555    ir_dereference_variable *deref_is_fallthru_var =
3556       new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var);
3557    instructions->push_tail(new(ctx) ir_assignment(deref_is_fallthru_var,
3558                                                   is_fallthru_val));
3559
3560    /* Initalize is_break state to false.
3561     */
3562    ir_rvalue *const is_break_val = new (ctx) ir_constant(false);
3563    state->switch_state.is_break_var = new(ctx) ir_variable(glsl_type::bool_type,
3564                                                            "switch_is_break_tmp",
3565                                                            ir_var_temporary);
3566    instructions->push_tail(state->switch_state.is_break_var);
3567
3568    ir_dereference_variable *deref_is_break_var =
3569       new(ctx) ir_dereference_variable(state->switch_state.is_break_var);
3570    instructions->push_tail(new(ctx) ir_assignment(deref_is_break_var,
3571                                                   is_break_val));
3572
3573    /* Cache test expression.
3574     */
3575    test_to_hir(instructions, state);
3576
3577    /* Emit code for body of switch stmt.
3578     */
3579    body->hir(instructions, state);
3580
3581    hash_table_dtor(state->switch_state.labels_ht);
3582
3583    state->switch_state = saved;
3584
3585    /* Switch statements do not have r-values. */
3586    return NULL;
3587 }
3588
3589
3590 void
3591 ast_switch_statement::test_to_hir(exec_list *instructions,
3592                                   struct _mesa_glsl_parse_state *state)
3593 {
3594    void *ctx = state;
3595
3596    /* Cache value of test expression. */
3597    ir_rvalue *const test_val =
3598       test_expression->hir(instructions,
3599                            state);
3600
3601    state->switch_state.test_var = new(ctx) ir_variable(test_val->type,
3602                                                        "switch_test_tmp",
3603                                                        ir_var_temporary);
3604    ir_dereference_variable *deref_test_var =
3605       new(ctx) ir_dereference_variable(state->switch_state.test_var);
3606
3607    instructions->push_tail(state->switch_state.test_var);
3608    instructions->push_tail(new(ctx) ir_assignment(deref_test_var, test_val));
3609 }
3610
3611
3612 ir_rvalue *
3613 ast_switch_body::hir(exec_list *instructions,
3614                      struct _mesa_glsl_parse_state *state)
3615 {
3616    if (stmts != NULL)
3617       stmts->hir(instructions, state);
3618
3619    /* Switch bodies do not have r-values. */
3620    return NULL;
3621 }
3622
3623 ir_rvalue *
3624 ast_case_statement_list::hir(exec_list *instructions,
3625                              struct _mesa_glsl_parse_state *state)
3626 {
3627    foreach_list_typed (ast_case_statement, case_stmt, link, & this->cases)
3628       case_stmt->hir(instructions, state);
3629
3630    /* Case statements do not have r-values. */
3631    return NULL;
3632 }
3633
3634 ir_rvalue *
3635 ast_case_statement::hir(exec_list *instructions,
3636                         struct _mesa_glsl_parse_state *state)
3637 {
3638    labels->hir(instructions, state);
3639
3640    /* Conditionally set fallthru state based on break state. */
3641    ir_constant *const false_val = new(state) ir_constant(false);
3642    ir_dereference_variable *const deref_is_fallthru_var =
3643       new(state) ir_dereference_variable(state->switch_state.is_fallthru_var);
3644    ir_dereference_variable *const deref_is_break_var =
3645       new(state) ir_dereference_variable(state->switch_state.is_break_var);
3646    ir_assignment *const reset_fallthru_on_break =
3647       new(state) ir_assignment(deref_is_fallthru_var,
3648                                false_val,
3649                                deref_is_break_var);
3650    instructions->push_tail(reset_fallthru_on_break);
3651
3652    /* Guard case statements depending on fallthru state. */
3653    ir_dereference_variable *const deref_fallthru_guard =
3654       new(state) ir_dereference_variable(state->switch_state.is_fallthru_var);
3655    ir_if *const test_fallthru = new(state) ir_if(deref_fallthru_guard);
3656
3657    foreach_list_typed (ast_node, stmt, link, & this->stmts)
3658       stmt->hir(& test_fallthru->then_instructions, state);
3659
3660    instructions->push_tail(test_fallthru);
3661
3662    /* Case statements do not have r-values. */
3663    return NULL;
3664 }
3665
3666
3667 ir_rvalue *
3668 ast_case_label_list::hir(exec_list *instructions,
3669                          struct _mesa_glsl_parse_state *state)
3670 {
3671    foreach_list_typed (ast_case_label, label, link, & this->labels)
3672       label->hir(instructions, state);
3673
3674    /* Case labels do not have r-values. */
3675    return NULL;
3676 }
3677
3678 ir_rvalue *
3679 ast_case_label::hir(exec_list *instructions,
3680                     struct _mesa_glsl_parse_state *state)
3681 {
3682    void *ctx = state;
3683
3684    ir_dereference_variable *deref_fallthru_var =
3685       new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var);
3686
3687    ir_rvalue *const true_val = new(ctx) ir_constant(true);
3688
3689    /* If not default case, ... */
3690    if (this->test_value != NULL) {
3691       /* Conditionally set fallthru state based on
3692        * comparison of cached test expression value to case label.
3693        */
3694       ir_rvalue *const label_rval = this->test_value->hir(instructions, state);
3695       ir_constant *label_const = label_rval->constant_expression_value();
3696
3697       if (!label_const) {
3698          YYLTYPE loc = this->test_value->get_location();
3699
3700          _mesa_glsl_error(& loc, state,
3701                           "switch statement case label must be a "
3702                           "constant expression");
3703
3704          /* Stuff a dummy value in to allow processing to continue. */
3705          label_const = new(ctx) ir_constant(0);
3706       } else {
3707          ast_expression *previous_label = (ast_expression *)
3708             hash_table_find(state->switch_state.labels_ht,
3709                             (void *)(uintptr_t)label_const->value.u[0]);
3710
3711          if (previous_label) {
3712             YYLTYPE loc = this->test_value->get_location();
3713             _mesa_glsl_error(& loc, state,
3714                              "duplicate case value");
3715
3716             loc = previous_label->get_location();
3717             _mesa_glsl_error(& loc, state,
3718                              "this is the previous case label");
3719          } else {
3720             hash_table_insert(state->switch_state.labels_ht,
3721                               this->test_value,
3722                               (void *)(uintptr_t)label_const->value.u[0]);
3723          }
3724       }
3725
3726       ir_dereference_variable *deref_test_var =
3727          new(ctx) ir_dereference_variable(state->switch_state.test_var);
3728
3729       ir_rvalue *const test_cond = new(ctx) ir_expression(ir_binop_all_equal,
3730                                                           label_const,
3731                                                           deref_test_var);
3732
3733       ir_assignment *set_fallthru_on_test =
3734          new(ctx) ir_assignment(deref_fallthru_var,
3735                                 true_val,
3736                                 test_cond);
3737
3738       instructions->push_tail(set_fallthru_on_test);
3739    } else { /* default case */
3740       if (state->switch_state.previous_default) {
3741          YYLTYPE loc = this->get_location();
3742          _mesa_glsl_error(& loc, state,
3743                           "multiple default labels in one switch");
3744
3745          loc = state->switch_state.previous_default->get_location();
3746          _mesa_glsl_error(& loc, state,
3747                           "this is the first default label");
3748       }
3749       state->switch_state.previous_default = this;
3750
3751       /* Set falltrhu state. */
3752       ir_assignment *set_fallthru =
3753          new(ctx) ir_assignment(deref_fallthru_var, true_val);
3754
3755       instructions->push_tail(set_fallthru);
3756    }
3757
3758    /* Case statements do not have r-values. */
3759    return NULL;
3760 }
3761
3762 void
3763 ast_iteration_statement::condition_to_hir(ir_loop *stmt,
3764                                           struct _mesa_glsl_parse_state *state)
3765 {
3766    void *ctx = state;
3767
3768    if (condition != NULL) {
3769       ir_rvalue *const cond =
3770          condition->hir(& stmt->body_instructions, state);
3771
3772       if ((cond == NULL)
3773           || !cond->type->is_boolean() || !cond->type->is_scalar()) {
3774          YYLTYPE loc = condition->get_location();
3775
3776          _mesa_glsl_error(& loc, state,
3777                           "loop condition must be scalar boolean");
3778       } else {
3779          /* As the first code in the loop body, generate a block that looks
3780           * like 'if (!condition) break;' as the loop termination condition.
3781           */
3782          ir_rvalue *const not_cond =
3783             new(ctx) ir_expression(ir_unop_logic_not, cond);
3784
3785          ir_if *const if_stmt = new(ctx) ir_if(not_cond);
3786
3787          ir_jump *const break_stmt =
3788             new(ctx) ir_loop_jump(ir_loop_jump::jump_break);
3789
3790          if_stmt->then_instructions.push_tail(break_stmt);
3791          stmt->body_instructions.push_tail(if_stmt);
3792       }
3793    }
3794 }
3795
3796
3797 ir_rvalue *
3798 ast_iteration_statement::hir(exec_list *instructions,
3799                              struct _mesa_glsl_parse_state *state)
3800 {
3801    void *ctx = state;
3802
3803    /* For-loops and while-loops start a new scope, but do-while loops do not.
3804     */
3805    if (mode != ast_do_while)
3806       state->symbols->push_scope();
3807
3808    if (init_statement != NULL)
3809       init_statement->hir(instructions, state);
3810
3811    ir_loop *const stmt = new(ctx) ir_loop();
3812    instructions->push_tail(stmt);
3813
3814    /* Track the current loop nesting. */
3815    ast_iteration_statement *nesting_ast = state->loop_nesting_ast;
3816
3817    state->loop_nesting_ast = this;
3818
3819    /* Likewise, indicate that following code is closest to a loop,
3820     * NOT closest to a switch.
3821     */
3822    bool saved_is_switch_innermost = state->switch_state.is_switch_innermost;
3823    state->switch_state.is_switch_innermost = false;
3824
3825    if (mode != ast_do_while)
3826       condition_to_hir(stmt, state);
3827
3828    if (body != NULL)
3829       body->hir(& stmt->body_instructions, state);
3830
3831    if (rest_expression != NULL)
3832       rest_expression->hir(& stmt->body_instructions, state);
3833
3834    if (mode == ast_do_while)
3835       condition_to_hir(stmt, state);
3836
3837    if (mode != ast_do_while)
3838       state->symbols->pop_scope();
3839
3840    /* Restore previous nesting before returning. */
3841    state->loop_nesting_ast = nesting_ast;
3842    state->switch_state.is_switch_innermost = saved_is_switch_innermost;
3843
3844    /* Loops do not have r-values.
3845     */
3846    return NULL;
3847 }
3848
3849
3850 ir_rvalue *
3851 ast_type_specifier::hir(exec_list *instructions,
3852                           struct _mesa_glsl_parse_state *state)
3853 {
3854    if (!this->is_precision_statement && this->structure == NULL)
3855       return NULL;
3856
3857    YYLTYPE loc = this->get_location();
3858
3859    if (this->precision != ast_precision_none
3860        && state->language_version != 100
3861        && state->language_version < 130) {
3862       _mesa_glsl_error(&loc, state,
3863                        "precision qualifiers exist only in "
3864                        "GLSL ES 1.00, and GLSL 1.30 and later");
3865       return NULL;
3866    }
3867    if (this->precision != ast_precision_none
3868        && this->structure != NULL) {
3869       _mesa_glsl_error(&loc, state,
3870                        "precision qualifiers do not apply to structures");
3871       return NULL;
3872    }
3873
3874    /* If this is a precision statement, check that the type to which it is
3875     * applied is either float or int.
3876     *
3877     * From section 4.5.3 of the GLSL 1.30 spec:
3878     *    "The precision statement
3879     *       precision precision-qualifier type;
3880     *    can be used to establish a default precision qualifier. The type
3881     *    field can be either int or float [...].  Any other types or
3882     *    qualifiers will result in an error.
3883     */
3884    if (this->is_precision_statement) {
3885       assert(this->precision != ast_precision_none);
3886       assert(this->structure == NULL); /* The check for structures was
3887                                         * performed above. */
3888       if (this->is_array) {
3889          _mesa_glsl_error(&loc, state,
3890                           "default precision statements do not apply to "
3891                           "arrays");
3892          return NULL;
3893       }
3894       if (strcmp(this->type_name, "float") != 0 &&
3895           strcmp(this->type_name, "int") != 0) {
3896          _mesa_glsl_error(&loc, state,
3897                           "default precision statements apply only to types "
3898                           "float and int");
3899          return NULL;
3900       }
3901
3902       /* FINISHME: Translate precision statements into IR. */
3903       return NULL;
3904    }
3905
3906    if (this->structure != NULL)
3907       return this->structure->hir(instructions, state);
3908
3909    return NULL;
3910 }
3911
3912
3913 ir_rvalue *
3914 ast_struct_specifier::hir(exec_list *instructions,
3915                           struct _mesa_glsl_parse_state *state)
3916 {
3917    unsigned decl_count = 0;
3918
3919    /* Make an initial pass over the list of structure fields to determine how
3920     * many there are.  Each element in this list is an ast_declarator_list.
3921     * This means that we actually need to count the number of elements in the
3922     * 'declarations' list in each of the elements.
3923     */
3924    foreach_list_typed (ast_declarator_list, decl_list, link,
3925                        &this->declarations) {
3926       foreach_list_const (decl_ptr, & decl_list->declarations) {
3927          decl_count++;
3928       }
3929    }
3930
3931    /* Allocate storage for the structure fields and process the field
3932     * declarations.  As the declarations are processed, try to also convert
3933     * the types to HIR.  This ensures that structure definitions embedded in
3934     * other structure definitions are processed.
3935     */
3936    glsl_struct_field *const fields = ralloc_array(state, glsl_struct_field,
3937                                                   decl_count);
3938
3939    unsigned i = 0;
3940    foreach_list_typed (ast_declarator_list, decl_list, link,
3941                        &this->declarations) {
3942       const char *type_name;
3943
3944       decl_list->type->specifier->hir(instructions, state);
3945
3946       /* Section 10.9 of the GLSL ES 1.00 specification states that
3947        * embedded structure definitions have been removed from the language.
3948        */
3949       if (state->es_shader && decl_list->type->specifier->structure != NULL) {
3950          YYLTYPE loc = this->get_location();
3951          _mesa_glsl_error(&loc, state, "Embedded structure definitions are "
3952                           "not allowed in GLSL ES 1.00.");
3953       }
3954
3955       const glsl_type *decl_type =
3956          decl_list->type->specifier->glsl_type(& type_name, state);
3957
3958       foreach_list_typed (ast_declaration, decl, link,
3959                           &decl_list->declarations) {
3960          const struct glsl_type *field_type = decl_type;
3961          if (decl->is_array) {
3962             YYLTYPE loc = decl->get_location();
3963             field_type = process_array_type(&loc, decl_type, decl->array_size,
3964                                             state);
3965          }
3966          fields[i].type = (field_type != NULL)
3967             ? field_type : glsl_type::error_type;
3968          fields[i].name = decl->identifier;
3969          i++;
3970       }
3971    }
3972
3973    assert(i == decl_count);
3974
3975    const glsl_type *t =
3976       glsl_type::get_record_instance(fields, decl_count, this->name);
3977
3978    YYLTYPE loc = this->get_location();
3979    if (!state->symbols->add_type(name, t)) {
3980       _mesa_glsl_error(& loc, state, "struct `%s' previously defined", name);
3981    } else {
3982       const glsl_type **s = reralloc(state, state->user_structures,
3983                                      const glsl_type *,
3984                                      state->num_user_structures + 1);
3985       if (s != NULL) {
3986          s[state->num_user_structures] = t;
3987          state->user_structures = s;
3988          state->num_user_structures++;
3989       }
3990    }
3991
3992    /* Structure type definitions do not have r-values.
3993     */
3994    return NULL;
3995 }
3996
3997 static struct gl_uniform_block *
3998 get_next_uniform_block(struct _mesa_glsl_parse_state *state)
3999 {
4000    if (state->num_uniform_blocks >= state->uniform_block_array_size) {
4001       state->uniform_block_array_size *= 2;
4002       if (state->uniform_block_array_size <= 4)
4003          state->uniform_block_array_size = 4;
4004
4005       state->uniform_blocks = reralloc(state,
4006                                        state->uniform_blocks,
4007                                        struct gl_uniform_block,
4008                                        state->uniform_block_array_size);
4009    }
4010
4011    memset(&state->uniform_blocks[state->num_uniform_blocks],
4012           0, sizeof(*state->uniform_blocks));
4013    return &state->uniform_blocks[state->num_uniform_blocks++];
4014 }
4015
4016 ir_rvalue *
4017 ast_uniform_block::hir(exec_list *instructions,
4018                        struct _mesa_glsl_parse_state *state)
4019 {
4020    /* The ast_uniform_block has a list of ast_declarator_lists.  We
4021     * need to turn those into ir_variables with an association
4022     * with this uniform block.
4023     */
4024    struct gl_uniform_block *ubo = get_next_uniform_block(state);
4025    ubo->Name = ralloc_strdup(state->uniform_blocks, this->block_name);
4026
4027    unsigned int num_variables = 0;
4028    foreach_list_typed(ast_declarator_list, decl_list, link, &declarations) {
4029       foreach_list_const(node, &decl_list->declarations) {
4030          num_variables++;
4031       }
4032    }
4033
4034    bool block_row_major = this->layout.flags.q.row_major;
4035
4036    ubo->Uniforms = rzalloc_array(state->uniform_blocks,
4037                                  struct gl_uniform_buffer_variable,
4038                                  num_variables);
4039
4040    foreach_list_typed(ast_declarator_list, decl_list, link, &declarations) {
4041       exec_list declared_variables;
4042
4043       decl_list->hir(&declared_variables, state);
4044
4045       foreach_list_const(node, &declared_variables) {
4046          struct ir_variable *var = (ir_variable *)node;
4047
4048          struct gl_uniform_buffer_variable *ubo_var =
4049             &ubo->Uniforms[ubo->NumUniforms++];
4050
4051          var->uniform_block = ubo - state->uniform_blocks;
4052
4053          ubo_var->Name = ralloc_strdup(state->uniform_blocks, var->name);
4054          ubo_var->Type = var->type;
4055          ubo_var->Buffer = ubo - state->uniform_blocks;
4056          ubo_var->Offset = 0; /* Assigned at link time. */
4057          ubo_var->RowMajor = block_row_major;
4058          if (decl_list->type->qualifier.flags.q.row_major)
4059             ubo_var->RowMajor = true;
4060          else if (decl_list->type->qualifier.flags.q.column_major)
4061             ubo_var->RowMajor = false;
4062
4063          /* From the GL_ARB_uniform_buffer_object spec:
4064           *
4065           *     "Sampler types are not allowed inside of uniform
4066           *      blocks. All other types, arrays, and structures
4067           *      allowed for uniforms are allowed within a uniform
4068           *      block."
4069           */
4070          if (var->type->contains_sampler()) {
4071             YYLTYPE loc = decl_list->get_location();
4072             _mesa_glsl_error(&loc, state,
4073                              "Uniform in non-default uniform block contains sampler\n");
4074          }
4075       }
4076
4077       instructions->append_list(&declared_variables);
4078    }
4079
4080    return NULL;
4081 }
4082
4083 static void
4084 detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
4085                                exec_list *instructions)
4086 {
4087    bool gl_FragColor_assigned = false;
4088    bool gl_FragData_assigned = false;
4089    bool user_defined_fs_output_assigned = false;
4090    ir_variable *user_defined_fs_output = NULL;
4091
4092    /* It would be nice to have proper location information. */
4093    YYLTYPE loc;
4094    memset(&loc, 0, sizeof(loc));
4095
4096    foreach_list(node, instructions) {
4097       ir_variable *var = ((ir_instruction *)node)->as_variable();
4098
4099       if (!var || !var->assigned)
4100          continue;
4101
4102       if (strcmp(var->name, "gl_FragColor") == 0)
4103          gl_FragColor_assigned = true;
4104       else if (strcmp(var->name, "gl_FragData") == 0)
4105          gl_FragData_assigned = true;
4106       else if (strncmp(var->name, "gl_", 3) != 0) {
4107          if (state->target == fragment_shader &&
4108              (var->mode == ir_var_out || var->mode == ir_var_inout)) {
4109             user_defined_fs_output_assigned = true;
4110             user_defined_fs_output = var;
4111          }
4112       }
4113    }
4114
4115    /* From the GLSL 1.30 spec:
4116     *
4117     *     "If a shader statically assigns a value to gl_FragColor, it
4118     *      may not assign a value to any element of gl_FragData. If a
4119     *      shader statically writes a value to any element of
4120     *      gl_FragData, it may not assign a value to
4121     *      gl_FragColor. That is, a shader may assign values to either
4122     *      gl_FragColor or gl_FragData, but not both. Multiple shaders
4123     *      linked together must also consistently write just one of
4124     *      these variables.  Similarly, if user declared output
4125     *      variables are in use (statically assigned to), then the
4126     *      built-in variables gl_FragColor and gl_FragData may not be
4127     *      assigned to. These incorrect usages all generate compile
4128     *      time errors."
4129     */
4130    if (gl_FragColor_assigned && gl_FragData_assigned) {
4131       _mesa_glsl_error(&loc, state, "fragment shader writes to both "
4132                        "`gl_FragColor' and `gl_FragData'\n");
4133    } else if (gl_FragColor_assigned && user_defined_fs_output_assigned) {
4134       _mesa_glsl_error(&loc, state, "fragment shader writes to both "
4135                        "`gl_FragColor' and `%s'\n",
4136                        user_defined_fs_output->name);
4137    } else if (gl_FragData_assigned && user_defined_fs_output_assigned) {
4138       _mesa_glsl_error(&loc, state, "fragment shader writes to both "
4139                        "`gl_FragData' and `%s'\n",
4140                        user_defined_fs_output->name);
4141    }
4142 }