Home | History | Annotate | Download | only in glsl
      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 
   2090 	 if (qual->flags.q.explicit_index) {
   2091             /* From the GLSL 4.30 specification, section 4.4.2 (Output
   2092              * Layout Qualifiers):
   2093              *
   2094              * "It is also a compile-time error if a fragment shader
   2095              *  sets a layout index to less than 0 or greater than 1."
   2096              *
   2097              * Older specifications don't mandate a behavior; we take
   2098              * this as a clarification and always generate the error.
   2099              */
   2100             if (qual->index < 0 || qual->index > 1) {
   2101                _mesa_glsl_error(loc, state,
   2102                                 "explicit index may only be 0 or 1\n");
   2103             } else {
   2104                var->explicit_index = true;
   2105                var->index = qual->index;
   2106             }
   2107 	 }
   2108       }
   2109    } else if (qual->flags.q.explicit_index) {
   2110 	 _mesa_glsl_error(loc, state,
   2111 			  "explicit index requires explicit location\n");
   2112    }
   2113 
   2114    /* Does the declaration use the 'layout' keyword?
   2115     */
   2116    const bool uses_layout = qual->flags.q.pixel_center_integer
   2117       || qual->flags.q.origin_upper_left
   2118       || qual->flags.q.explicit_location; /* no need for index since it relies on location */
   2119 
   2120    /* Does the declaration use the deprecated 'attribute' or 'varying'
   2121     * keywords?
   2122     */
   2123    const bool uses_deprecated_qualifier = qual->flags.q.attribute
   2124       || qual->flags.q.varying;
   2125 
   2126    /* Is the 'layout' keyword used with parameters that allow relaxed checking.
   2127     * Many implementations of GL_ARB_fragment_coord_conventions_enable and some
   2128     * implementations (only Mesa?) GL_ARB_explicit_attrib_location_enable
   2129     * allowed the layout qualifier to be used with 'varying' and 'attribute'.
   2130     * These extensions and all following extensions that add the 'layout'
   2131     * keyword have been modified to require the use of 'in' or 'out'.
   2132     *
   2133     * The following extension do not allow the deprecated keywords:
   2134     *
   2135     *    GL_AMD_conservative_depth
   2136     *    GL_ARB_conservative_depth
   2137     *    GL_ARB_gpu_shader5
   2138     *    GL_ARB_separate_shader_objects
   2139     *    GL_ARB_tesselation_shader
   2140     *    GL_ARB_transform_feedback3
   2141     *    GL_ARB_uniform_buffer_object
   2142     *
   2143     * It is unknown whether GL_EXT_shader_image_load_store or GL_NV_gpu_shader5
   2144     * allow layout with the deprecated keywords.
   2145     */
   2146    const bool relaxed_layout_qualifier_checking =
   2147       state->ARB_fragment_coord_conventions_enable;
   2148 
   2149    if (uses_layout && uses_deprecated_qualifier) {
   2150       if (relaxed_layout_qualifier_checking) {
   2151 	 _mesa_glsl_warning(loc, state,
   2152 			    "`layout' qualifier may not be used with "
   2153 			    "`attribute' or `varying'");
   2154       } else {
   2155 	 _mesa_glsl_error(loc, state,
   2156 			  "`layout' qualifier may not be used with "
   2157 			  "`attribute' or `varying'");
   2158       }
   2159    }
   2160 
   2161    /* Layout qualifiers for gl_FragDepth, which are enabled by extension
   2162     * AMD_conservative_depth.
   2163     */
   2164    int depth_layout_count = qual->flags.q.depth_any
   2165       + qual->flags.q.depth_greater
   2166       + qual->flags.q.depth_less
   2167       + qual->flags.q.depth_unchanged;
   2168    if (depth_layout_count > 0
   2169        && !state->AMD_conservative_depth_enable
   2170        && !state->ARB_conservative_depth_enable) {
   2171        _mesa_glsl_error(loc, state,
   2172                         "extension GL_AMD_conservative_depth or "
   2173                         "GL_ARB_conservative_depth must be enabled "
   2174 			"to use depth layout qualifiers");
   2175    } else if (depth_layout_count > 0
   2176               && strcmp(var->name, "gl_FragDepth") != 0) {
   2177        _mesa_glsl_error(loc, state,
   2178                         "depth layout qualifiers can be applied only to "
   2179                         "gl_FragDepth");
   2180    } else if (depth_layout_count > 1
   2181               && strcmp(var->name, "gl_FragDepth") == 0) {
   2182       _mesa_glsl_error(loc, state,
   2183                        "at most one depth layout qualifier can be applied to "
   2184                        "gl_FragDepth");
   2185    }
   2186    if (qual->flags.q.depth_any)
   2187       var->depth_layout = ir_depth_layout_any;
   2188    else if (qual->flags.q.depth_greater)
   2189       var->depth_layout = ir_depth_layout_greater;
   2190    else if (qual->flags.q.depth_less)
   2191       var->depth_layout = ir_depth_layout_less;
   2192    else if (qual->flags.q.depth_unchanged)
   2193        var->depth_layout = ir_depth_layout_unchanged;
   2194    else
   2195        var->depth_layout = ir_depth_layout_none;
   2196 
   2197    if (qual->flags.q.std140 ||
   2198        qual->flags.q.packed ||
   2199        qual->flags.q.shared) {
   2200       _mesa_glsl_error(loc, state,
   2201                        "uniform block layout qualifiers std140, packed, and "
   2202 		       "shared can only be applied to uniform blocks, not "
   2203 		       "members");
   2204    }
   2205 
   2206    if (!ubo_qualifiers_valid &&
   2207        (qual->flags.q.row_major || qual->flags.q.column_major)) {
   2208       _mesa_glsl_error(loc, state,
   2209                        "uniform block layout qualifiers row_major and "
   2210 		       "column_major can only be applied to uniform block "
   2211 		       "members");
   2212    }
   2213 }
   2214 
   2215 /**
   2216  * Get the variable that is being redeclared by this declaration
   2217  *
   2218  * Semantic checks to verify the validity of the redeclaration are also
   2219  * performed.  If semantic checks fail, compilation error will be emitted via
   2220  * \c _mesa_glsl_error, but a non-\c NULL pointer will still be returned.
   2221  *
   2222  * \returns
   2223  * A pointer to an existing variable in the current scope if the declaration
   2224  * is a redeclaration, \c NULL otherwise.
   2225  */
   2226 ir_variable *
   2227 get_variable_being_redeclared(ir_variable *var, ast_declaration *decl,
   2228 			      struct _mesa_glsl_parse_state *state)
   2229 {
   2230    /* Check if this declaration is actually a re-declaration, either to
   2231     * resize an array or add qualifiers to an existing variable.
   2232     *
   2233     * This is allowed for variables in the current scope, or when at
   2234     * global scope (for built-ins in the implicit outer scope).
   2235     */
   2236    ir_variable *earlier = state->symbols->get_variable(decl->identifier);
   2237    if (earlier == NULL ||
   2238        (state->current_function != NULL &&
   2239 	!state->symbols->name_declared_this_scope(decl->identifier))) {
   2240       return NULL;
   2241    }
   2242 
   2243 
   2244    YYLTYPE loc = decl->get_location();
   2245 
   2246    /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec,
   2247     *
   2248     * "It is legal to declare an array without a size and then
   2249     *  later re-declare the same name as an array of the same
   2250     *  type and specify a size."
   2251     */
   2252    if ((earlier->type->array_size() == 0)
   2253        && var->type->is_array()
   2254        && (var->type->element_type() == earlier->type->element_type())) {
   2255       /* FINISHME: This doesn't match the qualifiers on the two
   2256        * FINISHME: declarations.  It's not 100% clear whether this is
   2257        * FINISHME: required or not.
   2258        */
   2259 
   2260       const unsigned size = unsigned(var->type->array_size());
   2261       check_builtin_array_max_size(var->name, size, loc, state);
   2262       if ((size > 0) && (size <= earlier->max_array_access)) {
   2263 	 _mesa_glsl_error(& loc, state, "array size must be > %u due to "
   2264 			  "previous access",
   2265 			  earlier->max_array_access);
   2266       }
   2267 
   2268       earlier->type = var->type;
   2269       delete var;
   2270       var = NULL;
   2271    } else if (state->ARB_fragment_coord_conventions_enable
   2272 	      && strcmp(var->name, "gl_FragCoord") == 0
   2273 	      && earlier->type == var->type
   2274 	      && earlier->mode == var->mode) {
   2275       /* Allow redeclaration of gl_FragCoord for ARB_fcc layout
   2276        * qualifiers.
   2277        */
   2278       earlier->origin_upper_left = var->origin_upper_left;
   2279       earlier->pixel_center_integer = var->pixel_center_integer;
   2280 
   2281       /* According to section 4.3.7 of the GLSL 1.30 spec,
   2282        * the following built-in varaibles can be redeclared with an
   2283        * interpolation qualifier:
   2284        *    * gl_FrontColor
   2285        *    * gl_BackColor
   2286        *    * gl_FrontSecondaryColor
   2287        *    * gl_BackSecondaryColor
   2288        *    * gl_Color
   2289        *    * gl_SecondaryColor
   2290        */
   2291    } else if (state->language_version >= 130
   2292 	      && (strcmp(var->name, "gl_FrontColor") == 0
   2293 		  || strcmp(var->name, "gl_BackColor") == 0
   2294 		  || strcmp(var->name, "gl_FrontSecondaryColor") == 0
   2295 		  || strcmp(var->name, "gl_BackSecondaryColor") == 0
   2296 		  || strcmp(var->name, "gl_Color") == 0
   2297 		  || strcmp(var->name, "gl_SecondaryColor") == 0)
   2298 	      && earlier->type == var->type
   2299 	      && earlier->mode == var->mode) {
   2300       earlier->interpolation = var->interpolation;
   2301 
   2302       /* Layout qualifiers for gl_FragDepth. */
   2303    } else if ((state->AMD_conservative_depth_enable ||
   2304                state->ARB_conservative_depth_enable)
   2305 	      && strcmp(var->name, "gl_FragDepth") == 0
   2306 	      && earlier->type == var->type
   2307 	      && earlier->mode == var->mode) {
   2308 
   2309       /** From the AMD_conservative_depth spec:
   2310        *     Within any shader, the first redeclarations of gl_FragDepth
   2311        *     must appear before any use of gl_FragDepth.
   2312        */
   2313       if (earlier->used) {
   2314 	 _mesa_glsl_error(&loc, state,
   2315 			  "the first redeclaration of gl_FragDepth "
   2316 			  "must appear before any use of gl_FragDepth");
   2317       }
   2318 
   2319       /* Prevent inconsistent redeclaration of depth layout qualifier. */
   2320       if (earlier->depth_layout != ir_depth_layout_none
   2321 	  && earlier->depth_layout != var->depth_layout) {
   2322 	 _mesa_glsl_error(&loc, state,
   2323 			  "gl_FragDepth: depth layout is declared here "
   2324 			  "as '%s, but it was previously declared as "
   2325 			  "'%s'",
   2326 			  depth_layout_string(var->depth_layout),
   2327 			  depth_layout_string(earlier->depth_layout));
   2328       }
   2329 
   2330       earlier->depth_layout = var->depth_layout;
   2331 
   2332    } else {
   2333       _mesa_glsl_error(&loc, state, "`%s' redeclared", decl->identifier);
   2334    }
   2335 
   2336    return earlier;
   2337 }
   2338 
   2339 /**
   2340  * Generate the IR for an initializer in a variable declaration
   2341  */
   2342 ir_rvalue *
   2343 process_initializer(ir_variable *var, ast_declaration *decl,
   2344 		    ast_fully_specified_type *type,
   2345 		    exec_list *initializer_instructions,
   2346 		    struct _mesa_glsl_parse_state *state)
   2347 {
   2348    ir_rvalue *result = NULL;
   2349 
   2350    YYLTYPE initializer_loc = decl->initializer->get_location();
   2351 
   2352    /* From page 24 (page 30 of the PDF) of the GLSL 1.10 spec:
   2353     *
   2354     *    "All uniform variables are read-only and are initialized either
   2355     *    directly by an application via API commands, or indirectly by
   2356     *    OpenGL."
   2357     */
   2358    if ((state->language_version <= 110)
   2359        && (var->mode == ir_var_uniform)) {
   2360       _mesa_glsl_error(& initializer_loc, state,
   2361 		       "cannot initialize uniforms in GLSL 1.10");
   2362    }
   2363 
   2364    if (var->type->is_sampler()) {
   2365       _mesa_glsl_error(& initializer_loc, state,
   2366 		       "cannot initialize samplers");
   2367    }
   2368 
   2369    if ((var->mode == ir_var_in) && (state->current_function == NULL)) {
   2370       _mesa_glsl_error(& initializer_loc, state,
   2371 		       "cannot initialize %s shader input / %s",
   2372 		       _mesa_glsl_shader_target_name(state->target),
   2373 		       (state->target == vertex_shader)
   2374 		       ? "attribute" : "varying");
   2375    }
   2376 
   2377    ir_dereference *const lhs = new(state) ir_dereference_variable(var);
   2378    ir_rvalue *rhs = decl->initializer->hir(initializer_instructions,
   2379 					   state);
   2380 
   2381    /* Calculate the constant value if this is a const or uniform
   2382     * declaration.
   2383     */
   2384    if (type->qualifier.flags.q.constant
   2385        || type->qualifier.flags.q.uniform) {
   2386       ir_rvalue *new_rhs = validate_assignment(state, var->type, rhs, true);
   2387       if (new_rhs != NULL) {
   2388 	 rhs = new_rhs;
   2389 
   2390 	 ir_constant *constant_value = rhs->constant_expression_value();
   2391 	 if (!constant_value) {
   2392 	    _mesa_glsl_error(& initializer_loc, state,
   2393 			     "initializer of %s variable `%s' must be a "
   2394 			     "constant expression",
   2395 			     (type->qualifier.flags.q.constant)
   2396 			     ? "const" : "uniform",
   2397 			     decl->identifier);
   2398 	    if (var->type->is_numeric()) {
   2399 	       /* Reduce cascading errors. */
   2400 	       var->constant_value = ir_constant::zero(state, var->type);
   2401 	    }
   2402 	 } else {
   2403 	    rhs = constant_value;
   2404 	    var->constant_value = constant_value;
   2405 	 }
   2406       } else {
   2407 	 _mesa_glsl_error(&initializer_loc, state,
   2408 			  "initializer of type %s cannot be assigned to "
   2409 			  "variable of type %s",
   2410 			  rhs->type->name, var->type->name);
   2411 	 if (var->type->is_numeric()) {
   2412 	    /* Reduce cascading errors. */
   2413 	    var->constant_value = ir_constant::zero(state, var->type);
   2414 	 }
   2415       }
   2416    }
   2417 
   2418    if (rhs && !rhs->type->is_error()) {
   2419       bool temp = var->read_only;
   2420       if (type->qualifier.flags.q.constant)
   2421 	 var->read_only = false;
   2422 
   2423       /* Never emit code to initialize a uniform.
   2424        */
   2425       const glsl_type *initializer_type;
   2426       if (!type->qualifier.flags.q.uniform) {
   2427 	 result = do_assignment(initializer_instructions, state,
   2428 				NULL,
   2429 				lhs, rhs, true,
   2430 				type->get_location());
   2431 	 initializer_type = result->type;
   2432       } else
   2433 	 initializer_type = rhs->type;
   2434 
   2435       var->constant_initializer = rhs->constant_expression_value();
   2436       var->has_initializer = true;
   2437 
   2438       /* If the declared variable is an unsized array, it must inherrit
   2439        * its full type from the initializer.  A declaration such as
   2440        *
   2441        *     uniform float a[] = float[](1.0, 2.0, 3.0, 3.0);
   2442        *
   2443        * becomes
   2444        *
   2445        *     uniform float a[4] = float[](1.0, 2.0, 3.0, 3.0);
   2446        *
   2447        * The assignment generated in the if-statement (below) will also
   2448        * automatically handle this case for non-uniforms.
   2449        *
   2450        * If the declared variable is not an array, the types must
   2451        * already match exactly.  As a result, the type assignment
   2452        * here can be done unconditionally.  For non-uniforms the call
   2453        * to do_assignment can change the type of the initializer (via
   2454        * the implicit conversion rules).  For uniforms the initializer
   2455        * must be a constant expression, and the type of that expression
   2456        * was validated above.
   2457        */
   2458       var->type = initializer_type;
   2459 
   2460       var->read_only = temp;
   2461    }
   2462 
   2463    return result;
   2464 }
   2465 
   2466 ir_rvalue *
   2467 ast_declarator_list::hir(exec_list *instructions,
   2468 			 struct _mesa_glsl_parse_state *state)
   2469 {
   2470    void *ctx = state;
   2471    const struct glsl_type *decl_type;
   2472    const char *type_name = NULL;
   2473    ir_rvalue *result = NULL;
   2474    YYLTYPE loc = this->get_location();
   2475 
   2476    /* From page 46 (page 52 of the PDF) of the GLSL 1.50 spec:
   2477     *
   2478     *     "To ensure that a particular output variable is invariant, it is
   2479     *     necessary to use the invariant qualifier. It can either be used to
   2480     *     qualify a previously declared variable as being invariant
   2481     *
   2482     *         invariant gl_Position; // make existing gl_Position be invariant"
   2483     *
   2484     * In these cases the parser will set the 'invariant' flag in the declarator
   2485     * list, and the type will be NULL.
   2486     */
   2487    if (this->invariant) {
   2488       assert(this->type == NULL);
   2489 
   2490       if (state->current_function != NULL) {
   2491 	 _mesa_glsl_error(& loc, state,
   2492 			  "All uses of `invariant' keyword must be at global "
   2493 			  "scope\n");
   2494       }
   2495 
   2496       foreach_list_typed (ast_declaration, decl, link, &this->declarations) {
   2497 	 assert(!decl->is_array);
   2498 	 assert(decl->array_size == NULL);
   2499 	 assert(decl->initializer == NULL);
   2500 
   2501 	 ir_variable *const earlier =
   2502 	    state->symbols->get_variable(decl->identifier);
   2503 	 if (earlier == NULL) {
   2504 	    _mesa_glsl_error(& loc, state,
   2505 			     "Undeclared variable `%s' cannot be marked "
   2506 			     "invariant\n", decl->identifier);
   2507 	 } else if ((state->target == vertex_shader)
   2508 	       && (earlier->mode != ir_var_out)) {
   2509 	    _mesa_glsl_error(& loc, state,
   2510 			     "`%s' cannot be marked invariant, vertex shader "
   2511 			     "outputs only\n", decl->identifier);
   2512 	 } else if ((state->target == fragment_shader)
   2513 	       && (earlier->mode != ir_var_in)) {
   2514 	    _mesa_glsl_error(& loc, state,
   2515 			     "`%s' cannot be marked invariant, fragment shader "
   2516 			     "inputs only\n", decl->identifier);
   2517 	 } else if (earlier->used) {
   2518 	    _mesa_glsl_error(& loc, state,
   2519 			     "variable `%s' may not be redeclared "
   2520 			     "`invariant' after being used",
   2521 			     earlier->name);
   2522 	 } else {
   2523 	    earlier->invariant = true;
   2524 	 }
   2525       }
   2526 
   2527       /* Invariant redeclarations do not have r-values.
   2528        */
   2529       return NULL;
   2530    }
   2531 
   2532    assert(this->type != NULL);
   2533    assert(!this->invariant);
   2534 
   2535    /* The type specifier may contain a structure definition.  Process that
   2536     * before any of the variable declarations.
   2537     */
   2538    (void) this->type->specifier->hir(instructions, state);
   2539 
   2540    decl_type = this->type->specifier->glsl_type(& type_name, state);
   2541    if (this->declarations.is_empty()) {
   2542       /* If there is no structure involved in the program text, there are two
   2543        * possible scenarios:
   2544        *
   2545        * - The program text contained something like 'vec4;'.  This is an
   2546        *   empty declaration.  It is valid but weird.  Emit a warning.
   2547        *
   2548        * - The program text contained something like 'S;' and 'S' is not the
   2549        *   name of a known structure type.  This is both invalid and weird.
   2550        *   Emit an error.
   2551        *
   2552        * Note that if decl_type is NULL and there is a structure involved,
   2553        * there must have been some sort of error with the structure.  In this
   2554        * case we assume that an error was already generated on this line of
   2555        * code for the structure.  There is no need to generate an additional,
   2556        * confusing error.
   2557        */
   2558       assert(this->type->specifier->structure == NULL || decl_type != NULL
   2559 	     || state->error);
   2560       if (this->type->specifier->structure == NULL) {
   2561 	 if (decl_type != NULL) {
   2562 	    _mesa_glsl_warning(&loc, state, "empty declaration");
   2563 	 } else {
   2564 	    _mesa_glsl_error(&loc, state,
   2565 			     "invalid type `%s' in empty declaration",
   2566 			     type_name);
   2567 	 }
   2568       }
   2569    }
   2570 
   2571    foreach_list_typed (ast_declaration, decl, link, &this->declarations) {
   2572       const struct glsl_type *var_type;
   2573       ir_variable *var;
   2574 
   2575       /* FINISHME: Emit a warning if a variable declaration shadows a
   2576        * FINISHME: declaration at a higher scope.
   2577        */
   2578 
   2579       if ((decl_type == NULL) || decl_type->is_void()) {
   2580 	 if (type_name != NULL) {
   2581 	    _mesa_glsl_error(& loc, state,
   2582 			     "invalid type `%s' in declaration of `%s'",
   2583 			     type_name, decl->identifier);
   2584 	 } else {
   2585 	    _mesa_glsl_error(& loc, state,
   2586 			     "invalid type in declaration of `%s'",
   2587 			     decl->identifier);
   2588 	 }
   2589 	 continue;
   2590       }
   2591 
   2592       if (decl->is_array) {
   2593 	 var_type = process_array_type(&loc, decl_type, decl->array_size,
   2594 				       state);
   2595 	 if (var_type->is_error())
   2596 	    continue;
   2597       } else {
   2598 	 var_type = decl_type;
   2599       }
   2600 
   2601       var = new(ctx) ir_variable(var_type, decl->identifier, ir_var_auto);
   2602 
   2603       /* From page 22 (page 28 of the PDF) of the GLSL 1.10 specification;
   2604        *
   2605        *     "Global variables can only use the qualifiers const,
   2606        *     attribute, uni form, or varying. Only one may be
   2607        *     specified.
   2608        *
   2609        *     Local variables can only use the qualifier const."
   2610        *
   2611        * This is relaxed in GLSL 1.30.  It is also relaxed by any extension
   2612        * that adds the 'layout' keyword.
   2613        */
   2614       if ((state->language_version < 130)
   2615 	  && !state->ARB_explicit_attrib_location_enable
   2616 	  && !state->ARB_fragment_coord_conventions_enable) {
   2617 	 if (this->type->qualifier.flags.q.out) {
   2618 	    _mesa_glsl_error(& loc, state,
   2619 			     "`out' qualifier in declaration of `%s' "
   2620 			     "only valid for function parameters in %s.",
   2621 			     decl->identifier, state->version_string);
   2622 	 }
   2623 	 if (this->type->qualifier.flags.q.in) {
   2624 	    _mesa_glsl_error(& loc, state,
   2625 			     "`in' qualifier in declaration of `%s' "
   2626 			     "only valid for function parameters in %s.",
   2627 			     decl->identifier, state->version_string);
   2628 	 }
   2629 	 /* FINISHME: Test for other invalid qualifiers. */
   2630       }
   2631 
   2632       apply_type_qualifier_to_variable(& this->type->qualifier, var, state,
   2633 				       & loc, this->ubo_qualifiers_valid);
   2634 
   2635       if (this->type->qualifier.flags.q.invariant) {
   2636 	 if ((state->target == vertex_shader) && !(var->mode == ir_var_out ||
   2637 						   var->mode == ir_var_inout)) {
   2638 	    /* FINISHME: Note that this doesn't work for invariant on
   2639 	     * a function signature outval
   2640 	     */
   2641 	    _mesa_glsl_error(& loc, state,
   2642 			     "`%s' cannot be marked invariant, vertex shader "
   2643 			     "outputs only\n", var->name);
   2644 	 } else if ((state->target == fragment_shader) &&
   2645 		    !(var->mode == ir_var_in || var->mode == ir_var_inout)) {
   2646 	    /* FINISHME: Note that this doesn't work for invariant on
   2647 	     * a function signature inval
   2648 	     */
   2649 	    _mesa_glsl_error(& loc, state,
   2650 			     "`%s' cannot be marked invariant, fragment shader "
   2651 			     "inputs only\n", var->name);
   2652 	 }
   2653       }
   2654 
   2655       if (state->current_function != NULL) {
   2656 	 const char *mode = NULL;
   2657 	 const char *extra = "";
   2658 
   2659 	 /* There is no need to check for 'inout' here because the parser will
   2660 	  * only allow that in function parameter lists.
   2661 	  */
   2662 	 if (this->type->qualifier.flags.q.attribute) {
   2663 	    mode = "attribute";
   2664 	 } else if (this->type->qualifier.flags.q.uniform) {
   2665 	    mode = "uniform";
   2666 	 } else if (this->type->qualifier.flags.q.varying) {
   2667 	    mode = "varying";
   2668 	 } else if (this->type->qualifier.flags.q.in) {
   2669 	    mode = "in";
   2670 	    extra = " or in function parameter list";
   2671 	 } else if (this->type->qualifier.flags.q.out) {
   2672 	    mode = "out";
   2673 	    extra = " or in function parameter list";
   2674 	 }
   2675 
   2676 	 if (mode) {
   2677 	    _mesa_glsl_error(& loc, state,
   2678 			     "%s variable `%s' must be declared at "
   2679 			     "global scope%s",
   2680 			     mode, var->name, extra);
   2681 	 }
   2682       } else if (var->mode == ir_var_in) {
   2683          var->read_only = true;
   2684 
   2685 	 if (state->target == vertex_shader) {
   2686 	    bool error_emitted = false;
   2687 
   2688 	    /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec:
   2689 	     *
   2690 	     *    "Vertex shader inputs can only be float, floating-point
   2691 	     *    vectors, matrices, signed and unsigned integers and integer
   2692 	     *    vectors. Vertex shader inputs can also form arrays of these
   2693 	     *    types, but not structures."
   2694 	     *
   2695 	     * From page 31 (page 27 of the PDF) of the GLSL 1.30 spec:
   2696 	     *
   2697 	     *    "Vertex shader inputs can only be float, floating-point
   2698 	     *    vectors, matrices, signed and unsigned integers and integer
   2699 	     *    vectors. They cannot be arrays or structures."
   2700 	     *
   2701 	     * From page 23 (page 29 of the PDF) of the GLSL 1.20 spec:
   2702 	     *
   2703 	     *    "The attribute qualifier can be used only with float,
   2704 	     *    floating-point vectors, and matrices. Attribute variables
   2705 	     *    cannot be declared as arrays or structures."
   2706 	     */
   2707 	    const glsl_type *check_type = var->type->is_array()
   2708 	       ? var->type->fields.array : var->type;
   2709 
   2710 	    switch (check_type->base_type) {
   2711 	    case GLSL_TYPE_FLOAT:
   2712 	       break;
   2713 	    case GLSL_TYPE_UINT:
   2714 	    case GLSL_TYPE_INT:
   2715 	       if (state->language_version > 120)
   2716 		  break;
   2717 	       /* FALLTHROUGH */
   2718 	    default:
   2719 	       _mesa_glsl_error(& loc, state,
   2720 				"vertex shader input / attribute cannot have "
   2721 				"type %s`%s'",
   2722 				var->type->is_array() ? "array of " : "",
   2723 				check_type->name);
   2724 	       error_emitted = true;
   2725 	    }
   2726 
   2727 	    if (!error_emitted && (state->language_version <= 130)
   2728 		&& var->type->is_array()) {
   2729 	       _mesa_glsl_error(& loc, state,
   2730 				"vertex shader input / attribute cannot have "
   2731 				"array type");
   2732 	       error_emitted = true;
   2733 	    }
   2734 	 }
   2735       }
   2736 
   2737       /* Integer vertex outputs must be qualified with 'flat'.
   2738        *
   2739        * From section 4.3.6 of the GLSL 1.30 spec:
   2740        *    "If a vertex output is a signed or unsigned integer or integer
   2741        *    vector, then it must be qualified with the interpolation qualifier
   2742        *    flat."
   2743        */
   2744       if (state->language_version >= 130
   2745           && state->target == vertex_shader
   2746           && state->current_function == NULL
   2747           && var->type->is_integer()
   2748           && var->mode == ir_var_out
   2749           && var->interpolation != INTERP_QUALIFIER_FLAT) {
   2750 
   2751          _mesa_glsl_error(&loc, state, "If a vertex output is an integer, "
   2752                           "then it must be qualified with 'flat'");
   2753       }
   2754 
   2755 
   2756       /* Interpolation qualifiers cannot be applied to 'centroid' and
   2757        * 'centroid varying'.
   2758        *
   2759        * From page 29 (page 35 of the PDF) of the GLSL 1.30 spec:
   2760        *    "interpolation qualifiers may only precede the qualifiers in,
   2761        *    centroid in, out, or centroid out in a declaration. They do not apply
   2762        *    to the deprecated storage qualifiers varying or centroid varying."
   2763        */
   2764       if (state->language_version >= 130
   2765           && this->type->qualifier.has_interpolation()
   2766           && this->type->qualifier.flags.q.varying) {
   2767 
   2768          const char *i = this->type->qualifier.interpolation_string();
   2769          assert(i != NULL);
   2770          const char *s;
   2771          if (this->type->qualifier.flags.q.centroid)
   2772             s = "centroid varying";
   2773          else
   2774             s = "varying";
   2775 
   2776          _mesa_glsl_error(&loc, state,
   2777                           "qualifier '%s' cannot be applied to the "
   2778                           "deprecated storage qualifier '%s'", i, s);
   2779       }
   2780 
   2781 
   2782       /* Interpolation qualifiers can only apply to vertex shader outputs and
   2783        * fragment shader inputs.
   2784        *
   2785        * From page 29 (page 35 of the PDF) of the GLSL 1.30 spec:
   2786        *    "Outputs from a vertex shader (out) and inputs to a fragment
   2787        *    shader (in) can be further qualified with one or more of these
   2788        *    interpolation qualifiers"
   2789        */
   2790       if (state->language_version >= 130
   2791           && this->type->qualifier.has_interpolation()) {
   2792 
   2793          const char *i = this->type->qualifier.interpolation_string();
   2794          assert(i != NULL);
   2795 
   2796          switch (state->target) {
   2797          case vertex_shader:
   2798             if (this->type->qualifier.flags.q.in) {
   2799                _mesa_glsl_error(&loc, state,
   2800                                 "qualifier '%s' cannot be applied to vertex "
   2801                                 "shader inputs", i);
   2802             }
   2803             break;
   2804          case fragment_shader:
   2805             if (this->type->qualifier.flags.q.out) {
   2806                _mesa_glsl_error(&loc, state,
   2807                                 "qualifier '%s' cannot be applied to fragment "
   2808                                 "shader outputs", i);
   2809             }
   2810             break;
   2811          default:
   2812             assert(0);
   2813          }
   2814       }
   2815 
   2816 
   2817       /* From section 4.3.4 of the GLSL 1.30 spec:
   2818        *    "It is an error to use centroid in in a vertex shader."
   2819        */
   2820       if (state->language_version >= 130
   2821           && this->type->qualifier.flags.q.centroid
   2822           && this->type->qualifier.flags.q.in
   2823           && state->target == vertex_shader) {
   2824 
   2825          _mesa_glsl_error(&loc, state,
   2826                           "'centroid in' cannot be used in a vertex shader");
   2827       }
   2828 
   2829 
   2830       /* Precision qualifiers exists only in GLSL versions 1.00 and >= 1.30.
   2831        */
   2832       if (this->type->specifier->precision != ast_precision_none
   2833           && state->language_version != 100
   2834           && state->language_version < 130) {
   2835 
   2836          _mesa_glsl_error(&loc, state,
   2837                           "precision qualifiers are supported only in GLSL ES "
   2838                           "1.00, and GLSL 1.30 and later");
   2839       }
   2840 
   2841 
   2842       /* Precision qualifiers only apply to floating point and integer types.
   2843        *
   2844        * From section 4.5.2 of the GLSL 1.30 spec:
   2845        *    "Any floating point or any integer declaration can have the type
   2846        *    preceded by one of these precision qualifiers [...] Literal
   2847        *    constants do not have precision qualifiers. Neither do Boolean
   2848        *    variables.
   2849        *
   2850        * In GLSL ES, sampler types are also allowed.
   2851        *
   2852        * From page 87 of the GLSL ES spec:
   2853        *    "RESOLUTION: Allow sampler types to take a precision qualifier."
   2854        */
   2855       if (this->type->specifier->precision != ast_precision_none
   2856           && !var->type->is_float()
   2857           && !var->type->is_integer()
   2858           && !(var->type->is_sampler() && state->es_shader)
   2859           && !(var->type->is_array()
   2860                && (var->type->fields.array->is_float()
   2861                    || var->type->fields.array->is_integer()))) {
   2862 
   2863          _mesa_glsl_error(&loc, state,
   2864                           "precision qualifiers apply only to floating point"
   2865                           "%s types", state->es_shader ? ", integer, and sampler"
   2866 						       : "and integer");
   2867       }
   2868 
   2869       /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
   2870        *
   2871        *    "[Sampler types] can only be declared as function
   2872        *    parameters or uniform variables (see Section 4.3.5
   2873        *    "Uniform")".
   2874        */
   2875       if (var_type->contains_sampler() &&
   2876           !this->type->qualifier.flags.q.uniform) {
   2877          _mesa_glsl_error(&loc, state, "samplers must be declared uniform");
   2878       }
   2879 
   2880       /* Process the initializer and add its instructions to a temporary
   2881        * list.  This list will be added to the instruction stream (below) after
   2882        * the declaration is added.  This is done because in some cases (such as
   2883        * redeclarations) the declaration may not actually be added to the
   2884        * instruction stream.
   2885        */
   2886       exec_list initializer_instructions;
   2887       ir_variable *earlier = get_variable_being_redeclared(var, decl, state);
   2888 
   2889       if (decl->initializer != NULL) {
   2890 	 result = process_initializer((earlier == NULL) ? var : earlier,
   2891 				      decl, this->type,
   2892 				      &initializer_instructions, state);
   2893       }
   2894 
   2895       /* From page 23 (page 29 of the PDF) of the GLSL 1.10 spec:
   2896        *
   2897        *     "It is an error to write to a const variable outside of
   2898        *      its declaration, so they must be initialized when
   2899        *      declared."
   2900        */
   2901       if (this->type->qualifier.flags.q.constant && decl->initializer == NULL) {
   2902 	 _mesa_glsl_error(& loc, state,
   2903 			  "const declaration of `%s' must be initialized",
   2904 			  decl->identifier);
   2905       }
   2906 
   2907       /* If the declaration is not a redeclaration, there are a few additional
   2908        * semantic checks that must be applied.  In addition, variable that was
   2909        * created for the declaration should be added to the IR stream.
   2910        */
   2911       if (earlier == NULL) {
   2912 	 /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
   2913 	  *
   2914 	  *   "Identifiers starting with "gl_" are reserved for use by
   2915 	  *   OpenGL, and may not be declared in a shader as either a
   2916 	  *   variable or a function."
   2917 	  */
   2918 	 if (strncmp(decl->identifier, "gl_", 3) == 0)
   2919 	    _mesa_glsl_error(& loc, state,
   2920 			     "identifier `%s' uses reserved `gl_' prefix",
   2921 			     decl->identifier);
   2922 	 else if (strstr(decl->identifier, "__")) {
   2923 	    /* From page 14 (page 20 of the PDF) of the GLSL 1.10
   2924 	     * spec:
   2925 	     *
   2926 	     *     "In addition, all identifiers containing two
   2927 	     *      consecutive underscores (__) are reserved as
   2928 	     *      possible future keywords."
   2929 	     */
   2930 	    _mesa_glsl_error(& loc, state,
   2931 			     "identifier `%s' uses reserved `__' string",
   2932 			     decl->identifier);
   2933 	 }
   2934 
   2935 	 /* Add the variable to the symbol table.  Note that the initializer's
   2936 	  * IR was already processed earlier (though it hasn't been emitted
   2937 	  * yet), without the variable in scope.
   2938 	  *
   2939 	  * This differs from most C-like languages, but it follows the GLSL
   2940 	  * specification.  From page 28 (page 34 of the PDF) of the GLSL 1.50
   2941 	  * spec:
   2942 	  *
   2943 	  *     "Within a declaration, the scope of a name starts immediately
   2944 	  *     after the initializer if present or immediately after the name
   2945 	  *     being declared if not."
   2946 	  */
   2947 	 if (!state->symbols->add_variable(var)) {
   2948 	    YYLTYPE loc = this->get_location();
   2949 	    _mesa_glsl_error(&loc, state, "name `%s' already taken in the "
   2950 			     "current scope", decl->identifier);
   2951 	    continue;
   2952 	 }
   2953 
   2954 	 /* Push the variable declaration to the top.  It means that all the
   2955 	  * variable declarations will appear in a funny last-to-first order,
   2956 	  * but otherwise we run into trouble if a function is prototyped, a
   2957 	  * global var is decled, then the function is defined with usage of
   2958 	  * the global var.  See glslparsertest's CorrectModule.frag.
   2959 	  */
   2960 	 instructions->push_head(var);
   2961       }
   2962 
   2963       instructions->append_list(&initializer_instructions);
   2964    }
   2965 
   2966 
   2967    /* Generally, variable declarations do not have r-values.  However,
   2968     * one is used for the declaration in
   2969     *
   2970     * while (bool b = some_condition()) {
   2971     *   ...
   2972     * }
   2973     *
   2974     * so we return the rvalue from the last seen declaration here.
   2975     */
   2976    return result;
   2977 }
   2978 
   2979 
   2980 ir_rvalue *
   2981 ast_parameter_declarator::hir(exec_list *instructions,
   2982 			      struct _mesa_glsl_parse_state *state)
   2983 {
   2984    void *ctx = state;
   2985    const struct glsl_type *type;
   2986    const char *name = NULL;
   2987    YYLTYPE loc = this->get_location();
   2988 
   2989    type = this->type->specifier->glsl_type(& name, state);
   2990 
   2991    if (type == NULL) {
   2992       if (name != NULL) {
   2993 	 _mesa_glsl_error(& loc, state,
   2994 			  "invalid type `%s' in declaration of `%s'",
   2995 			  name, this->identifier);
   2996       } else {
   2997 	 _mesa_glsl_error(& loc, state,
   2998 			  "invalid type in declaration of `%s'",
   2999 			  this->identifier);
   3000       }
   3001 
   3002       type = glsl_type::error_type;
   3003    }
   3004 
   3005    /* From page 62 (page 68 of the PDF) of the GLSL 1.50 spec:
   3006     *
   3007     *    "Functions that accept no input arguments need not use void in the
   3008     *    argument list because prototypes (or definitions) are required and
   3009     *    therefore there is no ambiguity when an empty argument list "( )" is
   3010     *    declared. The idiom "(void)" as a parameter list is provided for
   3011     *    convenience."
   3012     *
   3013     * Placing this check here prevents a void parameter being set up
   3014     * for a function, which avoids tripping up checks for main taking
   3015     * parameters and lookups of an unnamed symbol.
   3016     */
   3017    if (type->is_void()) {
   3018       if (this->identifier != NULL)
   3019 	 _mesa_glsl_error(& loc, state,
   3020 			  "named parameter cannot have type `void'");
   3021 
   3022       is_void = true;
   3023       return NULL;
   3024    }
   3025 
   3026    if (formal_parameter && (this->identifier == NULL)) {
   3027       _mesa_glsl_error(& loc, state, "formal parameter lacks a name");
   3028       return NULL;
   3029    }
   3030 
   3031    /* This only handles "vec4 foo[..]".  The earlier specifier->glsl_type(...)
   3032     * call already handled the "vec4[..] foo" case.
   3033     */
   3034    if (this->is_array) {
   3035       type = process_array_type(&loc, type, this->array_size, state);
   3036    }
   3037 
   3038    if (!type->is_error() && type->array_size() == 0) {
   3039       _mesa_glsl_error(&loc, state, "arrays passed as parameters must have "
   3040 		       "a declared size.");
   3041       type = glsl_type::error_type;
   3042    }
   3043 
   3044    is_void = false;
   3045    ir_variable *var = new(ctx) ir_variable(type, this->identifier, ir_var_in);
   3046 
   3047    /* Apply any specified qualifiers to the parameter declaration.  Note that
   3048     * for function parameters the default mode is 'in'.
   3049     */
   3050    apply_type_qualifier_to_variable(& this->type->qualifier, var, state, & loc,
   3051 				    false);
   3052 
   3053    /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
   3054     *
   3055     *    "Samplers cannot be treated as l-values; hence cannot be used
   3056     *    as out or inout function parameters, nor can they be assigned
   3057     *    into."
   3058     */
   3059    if ((var->mode == ir_var_inout || var->mode == ir_var_out)
   3060        && type->contains_sampler()) {
   3061       _mesa_glsl_error(&loc, state, "out and inout parameters cannot contain samplers");
   3062       type = glsl_type::error_type;
   3063    }
   3064 
   3065    /* From page 39 (page 45 of the PDF) of the GLSL 1.10 spec:
   3066     *
   3067     *    "When calling a function, expressions that do not evaluate to
   3068     *     l-values cannot be passed to parameters declared as out or inout."
   3069     *
   3070     * From page 32 (page 38 of the PDF) of the GLSL 1.10 spec:
   3071     *
   3072     *    "Other binary or unary expressions, non-dereferenced arrays,
   3073     *     function names, swizzles with repeated fields, and constants
   3074     *     cannot be l-values."
   3075     *
   3076     * So for GLSL 1.10, passing an array as an out or inout parameter is not
   3077     * allowed.  This restriction is removed in GLSL 1.20, and in GLSL ES.
   3078     */
   3079    if ((var->mode == ir_var_inout || var->mode == ir_var_out)
   3080        && type->is_array() && state->language_version == 110) {
   3081       _mesa_glsl_error(&loc, state, "Arrays cannot be out or inout parameters in GLSL 1.10");
   3082       type = glsl_type::error_type;
   3083    }
   3084 
   3085    instructions->push_tail(var);
   3086 
   3087    /* Parameter declarations do not have r-values.
   3088     */
   3089    return NULL;
   3090 }
   3091 
   3092 
   3093 void
   3094 ast_parameter_declarator::parameters_to_hir(exec_list *ast_parameters,
   3095 					    bool formal,
   3096 					    exec_list *ir_parameters,
   3097 					    _mesa_glsl_parse_state *state)
   3098 {
   3099    ast_parameter_declarator *void_param = NULL;
   3100    unsigned count = 0;
   3101 
   3102    foreach_list_typed (ast_parameter_declarator, param, link, ast_parameters) {
   3103       param->formal_parameter = formal;
   3104       param->hir(ir_parameters, state);
   3105 
   3106       if (param->is_void)
   3107 	 void_param = param;
   3108 
   3109       count++;
   3110    }
   3111 
   3112    if ((void_param != NULL) && (count > 1)) {
   3113       YYLTYPE loc = void_param->get_location();
   3114 
   3115       _mesa_glsl_error(& loc, state,
   3116 		       "`void' parameter must be only parameter");
   3117    }
   3118 }
   3119 
   3120 
   3121 void
   3122 emit_function(_mesa_glsl_parse_state *state, ir_function *f)
   3123 {
   3124    /* IR invariants disallow function declarations or definitions
   3125     * nested within other function definitions.  But there is no
   3126     * requirement about the relative order of function declarations
   3127     * and definitions with respect to one another.  So simply insert
   3128     * the new ir_function block at the end of the toplevel instruction
   3129     * list.
   3130     */
   3131    state->toplevel_ir->push_tail(f);
   3132 }
   3133 
   3134 
   3135 ir_rvalue *
   3136 ast_function::hir(exec_list *instructions,
   3137 		  struct _mesa_glsl_parse_state *state)
   3138 {
   3139    void *ctx = state;
   3140    ir_function *f = NULL;
   3141    ir_function_signature *sig = NULL;
   3142    exec_list hir_parameters;
   3143 
   3144    const char *const name = identifier;
   3145 
   3146    /* New functions are always added to the top-level IR instruction stream,
   3147     * so this instruction list pointer is ignored.  See also emit_function
   3148     * (called below).
   3149     */
   3150    (void) instructions;
   3151 
   3152    /* From page 21 (page 27 of the PDF) of the GLSL 1.20 spec,
   3153     *
   3154     *   "Function declarations (prototypes) cannot occur inside of functions;
   3155     *   they must be at global scope, or for the built-in functions, outside
   3156     *   the global scope."
   3157     *
   3158     * From page 27 (page 33 of the PDF) of the GLSL ES 1.00.16 spec,
   3159     *
   3160     *   "User defined functions may only be defined within the global scope."
   3161     *
   3162     * Note that this language does not appear in GLSL 1.10.
   3163     */
   3164    if ((state->current_function != NULL) && (state->language_version != 110)) {
   3165       YYLTYPE loc = this->get_location();
   3166       _mesa_glsl_error(&loc, state,
   3167 		       "declaration of function `%s' not allowed within "
   3168 		       "function body", name);
   3169    }
   3170 
   3171    /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
   3172     *
   3173     *   "Identifiers starting with "gl_" are reserved for use by
   3174     *   OpenGL, and may not be declared in a shader as either a
   3175     *   variable or a function."
   3176     */
   3177    if (strncmp(name, "gl_", 3) == 0) {
   3178       YYLTYPE loc = this->get_location();
   3179       _mesa_glsl_error(&loc, state,
   3180 		       "identifier `%s' uses reserved `gl_' prefix", name);
   3181    }
   3182 
   3183    /* Convert the list of function parameters to HIR now so that they can be
   3184     * used below to compare this function's signature with previously seen
   3185     * signatures for functions with the same name.
   3186     */
   3187    ast_parameter_declarator::parameters_to_hir(& this->parameters,
   3188 					       is_definition,
   3189 					       & hir_parameters, state);
   3190 
   3191    const char *return_type_name;
   3192    const glsl_type *return_type =
   3193       this->return_type->specifier->glsl_type(& return_type_name, state);
   3194 
   3195    if (!return_type) {
   3196       YYLTYPE loc = this->get_location();
   3197       _mesa_glsl_error(&loc, state,
   3198 		       "function `%s' has undeclared return type `%s'",
   3199 		       name, return_type_name);
   3200       return_type = glsl_type::error_type;
   3201    }
   3202 
   3203    /* From page 56 (page 62 of the PDF) of the GLSL 1.30 spec:
   3204     * "No qualifier is allowed on the return type of a function."
   3205     */
   3206    if (this->return_type->has_qualifiers()) {
   3207       YYLTYPE loc = this->get_location();
   3208       _mesa_glsl_error(& loc, state,
   3209 		       "function `%s' return type has qualifiers", name);
   3210    }
   3211 
   3212    /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
   3213     *
   3214     *    "[Sampler types] can only be declared as function parameters
   3215     *    or uniform variables (see Section 4.3.5 "Uniform")".
   3216     */
   3217    if (return_type->contains_sampler()) {
   3218       YYLTYPE loc = this->get_location();
   3219       _mesa_glsl_error(&loc, state,
   3220                        "function `%s' return type can't contain a sampler",
   3221                        name);
   3222    }
   3223 
   3224    /* Verify that this function's signature either doesn't match a previously
   3225     * seen signature for a function with the same name, or, if a match is found,
   3226     * that the previously seen signature does not have an associated definition.
   3227     */
   3228    f = state->symbols->get_function(name);
   3229    if (f != NULL && (state->es_shader || f->has_user_signature())) {
   3230       sig = f->exact_matching_signature(&hir_parameters);
   3231       if (sig != NULL) {
   3232 	 const char *badvar = sig->qualifiers_match(&hir_parameters);
   3233 	 if (badvar != NULL) {
   3234 	    YYLTYPE loc = this->get_location();
   3235 
   3236 	    _mesa_glsl_error(&loc, state, "function `%s' parameter `%s' "
   3237 			     "qualifiers don't match prototype", name, badvar);
   3238 	 }
   3239 
   3240 	 if (sig->return_type != return_type) {
   3241 	    YYLTYPE loc = this->get_location();
   3242 
   3243 	    _mesa_glsl_error(&loc, state, "function `%s' return type doesn't "
   3244 			     "match prototype", name);
   3245 	 }
   3246 
   3247 	 if (is_definition && sig->is_defined) {
   3248 	    YYLTYPE loc = this->get_location();
   3249 
   3250 	    _mesa_glsl_error(& loc, state, "function `%s' redefined", name);
   3251 	 }
   3252       }
   3253    } else {
   3254       f = new(ctx) ir_function(name);
   3255       if (!state->symbols->add_function(f)) {
   3256 	 /* This function name shadows a non-function use of the same name. */
   3257 	 YYLTYPE loc = this->get_location();
   3258 
   3259 	 _mesa_glsl_error(&loc, state, "function name `%s' conflicts with "
   3260 			  "non-function", name);
   3261 	 return NULL;
   3262       }
   3263 
   3264       emit_function(state, f);
   3265    }
   3266 
   3267    /* Verify the return type of main() */
   3268    if (strcmp(name, "main") == 0) {
   3269       if (! return_type->is_void()) {
   3270 	 YYLTYPE loc = this->get_location();
   3271 
   3272 	 _mesa_glsl_error(& loc, state, "main() must return void");
   3273       }
   3274 
   3275       if (!hir_parameters.is_empty()) {
   3276 	 YYLTYPE loc = this->get_location();
   3277 
   3278 	 _mesa_glsl_error(& loc, state, "main() must not take any parameters");
   3279       }
   3280    }
   3281 
   3282    /* Finish storing the information about this new function in its signature.
   3283     */
   3284    if (sig == NULL) {
   3285       sig = new(ctx) ir_function_signature(return_type);
   3286       f->add_signature(sig);
   3287    }
   3288 
   3289    sig->replace_parameters(&hir_parameters);
   3290    signature = sig;
   3291 
   3292    /* Function declarations (prototypes) do not have r-values.
   3293     */
   3294    return NULL;
   3295 }
   3296 
   3297 
   3298 ir_rvalue *
   3299 ast_function_definition::hir(exec_list *instructions,
   3300 			     struct _mesa_glsl_parse_state *state)
   3301 {
   3302    prototype->is_definition = true;
   3303    prototype->hir(instructions, state);
   3304 
   3305    ir_function_signature *signature = prototype->signature;
   3306    if (signature == NULL)
   3307       return NULL;
   3308 
   3309    assert(state->current_function == NULL);
   3310    state->current_function = signature;
   3311    state->found_return = false;
   3312 
   3313    /* Duplicate parameters declared in the prototype as concrete variables.
   3314     * Add these to the symbol table.
   3315     */
   3316    state->symbols->push_scope();
   3317    foreach_iter(exec_list_iterator, iter, signature->parameters) {
   3318       ir_variable *const var = ((ir_instruction *) iter.get())->as_variable();
   3319 
   3320       assert(var != NULL);
   3321 
   3322       /* The only way a parameter would "exist" is if two parameters have
   3323        * the same name.
   3324        */
   3325       if (state->symbols->name_declared_this_scope(var->name)) {
   3326 	 YYLTYPE loc = this->get_location();
   3327 
   3328 	 _mesa_glsl_error(& loc, state, "parameter `%s' redeclared", var->name);
   3329       } else {
   3330 	 state->symbols->add_variable(var);
   3331       }
   3332    }
   3333 
   3334    /* Convert the body of the function to HIR. */
   3335    this->body->hir(&signature->body, state);
   3336    signature->is_defined = true;
   3337 
   3338    state->symbols->pop_scope();
   3339 
   3340    assert(state->current_function == signature);
   3341    state->current_function = NULL;
   3342 
   3343    if (!signature->return_type->is_void() && !state->found_return) {
   3344       YYLTYPE loc = this->get_location();
   3345       _mesa_glsl_error(& loc, state, "function `%s' has non-void return type "
   3346 		       "%s, but no return statement",
   3347 		       signature->function_name(),
   3348 		       signature->return_type->name);
   3349    }
   3350 
   3351    /* Function definitions do not have r-values.
   3352     */
   3353    return NULL;
   3354 }
   3355 
   3356 
   3357 ir_rvalue *
   3358 ast_jump_statement::hir(exec_list *instructions,
   3359 			struct _mesa_glsl_parse_state *state)
   3360 {
   3361    void *ctx = state;
   3362 
   3363    switch (mode) {
   3364    case ast_return: {
   3365       ir_return *inst;
   3366       assert(state->current_function);
   3367 
   3368       if (opt_return_value) {
   3369 	 ir_rvalue *const ret = opt_return_value->hir(instructions, state);
   3370 
   3371 	 /* The value of the return type can be NULL if the shader says
   3372 	  * 'return foo();' and foo() is a function that returns void.
   3373 	  *
   3374 	  * NOTE: The GLSL spec doesn't say that this is an error.  The type
   3375 	  * of the return value is void.  If the return type of the function is
   3376 	  * also void, then this should compile without error.  Seriously.
   3377 	  */
   3378 	 const glsl_type *const ret_type =
   3379 	    (ret == NULL) ? glsl_type::void_type : ret->type;
   3380 
   3381 	 /* Implicit conversions are not allowed for return values. */
   3382 	 if (state->current_function->return_type != ret_type) {
   3383 	    YYLTYPE loc = this->get_location();
   3384 
   3385 	    _mesa_glsl_error(& loc, state,
   3386 			     "`return' with wrong type %s, in function `%s' "
   3387 			     "returning %s",
   3388 			     ret_type->name,
   3389 			     state->current_function->function_name(),
   3390 			     state->current_function->return_type->name);
   3391 	 }
   3392 
   3393 	 inst = new(ctx) ir_return(ret);
   3394       } else {
   3395 	 if (state->current_function->return_type->base_type !=
   3396 	     GLSL_TYPE_VOID) {
   3397 	    YYLTYPE loc = this->get_location();
   3398 
   3399 	    _mesa_glsl_error(& loc, state,
   3400 			     "`return' with no value, in function %s returning "
   3401 			     "non-void",
   3402 			     state->current_function->function_name());
   3403 	 }
   3404 	 inst = new(ctx) ir_return;
   3405       }
   3406 
   3407       state->found_return = true;
   3408       instructions->push_tail(inst);
   3409       break;
   3410    }
   3411 
   3412    case ast_discard:
   3413       if (state->target != fragment_shader) {
   3414 	 YYLTYPE loc = this->get_location();
   3415 
   3416 	 _mesa_glsl_error(& loc, state,
   3417 			  "`discard' may only appear in a fragment shader");
   3418       }
   3419       instructions->push_tail(new(ctx) ir_discard);
   3420       break;
   3421 
   3422    case ast_break:
   3423    case ast_continue:
   3424       if (mode == ast_continue &&
   3425 	  state->loop_nesting_ast == NULL) {
   3426 	 YYLTYPE loc = this->get_location();
   3427 
   3428 	 _mesa_glsl_error(& loc, state,
   3429 			  "continue may only appear in a loop");
   3430       } else if (mode == ast_break &&
   3431 		 state->loop_nesting_ast == NULL &&
   3432 		 state->switch_state.switch_nesting_ast == NULL) {
   3433 	 YYLTYPE loc = this->get_location();
   3434 
   3435 	 _mesa_glsl_error(& loc, state,
   3436 			  "break may only appear in a loop or a switch");
   3437       } else {
   3438 	 /* For a loop, inline the for loop expression again,
   3439 	  * since we don't know where near the end of
   3440 	  * the loop body the normal copy of it
   3441 	  * is going to be placed.
   3442 	  */
   3443 	 if (state->loop_nesting_ast != NULL &&
   3444 	     mode == ast_continue &&
   3445 	     state->loop_nesting_ast->rest_expression) {
   3446 	    state->loop_nesting_ast->rest_expression->hir(instructions,
   3447 							  state);
   3448 	 }
   3449 
   3450 	 if (state->switch_state.is_switch_innermost &&
   3451 	     mode == ast_break) {
   3452 	    /* Force break out of switch by setting is_break switch state.
   3453 	     */
   3454 	    ir_variable *const is_break_var = state->switch_state.is_break_var;
   3455 	    ir_dereference_variable *const deref_is_break_var =
   3456 	       new(ctx) ir_dereference_variable(is_break_var);
   3457 	    ir_constant *const true_val = new(ctx) ir_constant(true);
   3458 	    ir_assignment *const set_break_var =
   3459 	       new(ctx) ir_assignment(deref_is_break_var, true_val);
   3460 
   3461 	    instructions->push_tail(set_break_var);
   3462 	 }
   3463 	 else {
   3464 	    ir_loop_jump *const jump =
   3465 	       new(ctx) ir_loop_jump((mode == ast_break)
   3466 				     ? ir_loop_jump::jump_break
   3467 				     : ir_loop_jump::jump_continue);
   3468 	    instructions->push_tail(jump);
   3469 	 }
   3470       }
   3471 
   3472       break;
   3473    }
   3474 
   3475    /* Jump instructions do not have r-values.
   3476     */
   3477    return NULL;
   3478 }
   3479 
   3480 
   3481 ir_rvalue *
   3482 ast_selection_statement::hir(exec_list *instructions,
   3483 			     struct _mesa_glsl_parse_state *state)
   3484 {
   3485    void *ctx = state;
   3486 
   3487    ir_rvalue *const condition = this->condition->hir(instructions, state);
   3488 
   3489    /* From page 66 (page 72 of the PDF) of the GLSL 1.50 spec:
   3490     *
   3491     *    "Any expression whose type evaluates to a Boolean can be used as the
   3492     *    conditional expression bool-expression. Vector types are not accepted
   3493     *    as the expression to if."
   3494     *
   3495     * The checks are separated so that higher quality diagnostics can be
   3496     * generated for cases where both rules are violated.
   3497     */
   3498    if (!condition->type->is_boolean() || !condition->type->is_scalar()) {
   3499       YYLTYPE loc = this->condition->get_location();
   3500 
   3501       _mesa_glsl_error(& loc, state, "if-statement condition must be scalar "
   3502 		       "boolean");
   3503    }
   3504 
   3505    ir_if *const stmt = new(ctx) ir_if(condition);
   3506 
   3507    if (then_statement != NULL) {
   3508       state->symbols->push_scope();
   3509       then_statement->hir(& stmt->then_instructions, state);
   3510       state->symbols->pop_scope();
   3511    }
   3512 
   3513    if (else_statement != NULL) {
   3514       state->symbols->push_scope();
   3515       else_statement->hir(& stmt->else_instructions, state);
   3516       state->symbols->pop_scope();
   3517    }
   3518 
   3519    instructions->push_tail(stmt);
   3520 
   3521    /* if-statements do not have r-values.
   3522     */
   3523    return NULL;
   3524 }
   3525 
   3526 
   3527 ir_rvalue *
   3528 ast_switch_statement::hir(exec_list *instructions,
   3529 			  struct _mesa_glsl_parse_state *state)
   3530 {
   3531    void *ctx = state;
   3532 
   3533    ir_rvalue *const test_expression =
   3534       this->test_expression->hir(instructions, state);
   3535 
   3536    /* From page 66 (page 55 of the PDF) of the GLSL 1.50 spec:
   3537     *
   3538     *    "The type of init-expression in a switch statement must be a
   3539     *     scalar integer."
   3540     */
   3541    if (!test_expression->type->is_scalar() ||
   3542        !test_expression->type->is_integer()) {
   3543       YYLTYPE loc = this->test_expression->get_location();
   3544 
   3545       _mesa_glsl_error(& loc,
   3546 		       state,
   3547 		       "switch-statement expression must be scalar "
   3548 		       "integer");
   3549    }
   3550 
   3551    /* Track the switch-statement nesting in a stack-like manner.
   3552     */
   3553    struct glsl_switch_state saved = state->switch_state;
   3554 
   3555    state->switch_state.is_switch_innermost = true;
   3556    state->switch_state.switch_nesting_ast = this;
   3557    state->switch_state.labels_ht = hash_table_ctor(0, hash_table_pointer_hash,
   3558 						   hash_table_pointer_compare);
   3559    state->switch_state.previous_default = NULL;
   3560 
   3561    /* Initalize is_fallthru state to false.
   3562     */
   3563    ir_rvalue *const is_fallthru_val = new (ctx) ir_constant(false);
   3564    state->switch_state.is_fallthru_var =
   3565       new(ctx) ir_variable(glsl_type::bool_type,
   3566 			   "switch_is_fallthru_tmp",
   3567 			   ir_var_temporary);
   3568    instructions->push_tail(state->switch_state.is_fallthru_var);
   3569 
   3570    ir_dereference_variable *deref_is_fallthru_var =
   3571       new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var);
   3572    instructions->push_tail(new(ctx) ir_assignment(deref_is_fallthru_var,
   3573 						  is_fallthru_val));
   3574 
   3575    /* Initalize is_break state to false.
   3576     */
   3577    ir_rvalue *const is_break_val = new (ctx) ir_constant(false);
   3578    state->switch_state.is_break_var = new(ctx) ir_variable(glsl_type::bool_type,
   3579 							   "switch_is_break_tmp",
   3580 							   ir_var_temporary);
   3581    instructions->push_tail(state->switch_state.is_break_var);
   3582 
   3583    ir_dereference_variable *deref_is_break_var =
   3584       new(ctx) ir_dereference_variable(state->switch_state.is_break_var);
   3585    instructions->push_tail(new(ctx) ir_assignment(deref_is_break_var,
   3586 						  is_break_val));
   3587 
   3588    /* Cache test expression.
   3589     */
   3590    test_to_hir(instructions, state);
   3591 
   3592    /* Emit code for body of switch stmt.
   3593     */
   3594    body->hir(instructions, state);
   3595 
   3596    hash_table_dtor(state->switch_state.labels_ht);
   3597 
   3598    state->switch_state = saved;
   3599 
   3600    /* Switch statements do not have r-values. */
   3601    return NULL;
   3602 }
   3603 
   3604 
   3605 void
   3606 ast_switch_statement::test_to_hir(exec_list *instructions,
   3607 				  struct _mesa_glsl_parse_state *state)
   3608 {
   3609    void *ctx = state;
   3610 
   3611    /* Cache value of test expression. */
   3612    ir_rvalue *const test_val =
   3613       test_expression->hir(instructions,
   3614 			   state);
   3615 
   3616    state->switch_state.test_var = new(ctx) ir_variable(test_val->type,
   3617 						       "switch_test_tmp",
   3618 						       ir_var_temporary);
   3619    ir_dereference_variable *deref_test_var =
   3620       new(ctx) ir_dereference_variable(state->switch_state.test_var);
   3621 
   3622    instructions->push_tail(state->switch_state.test_var);
   3623    instructions->push_tail(new(ctx) ir_assignment(deref_test_var, test_val));
   3624 }
   3625 
   3626 
   3627 ir_rvalue *
   3628 ast_switch_body::hir(exec_list *instructions,
   3629 		     struct _mesa_glsl_parse_state *state)
   3630 {
   3631    if (stmts != NULL)
   3632       stmts->hir(instructions, state);
   3633 
   3634    /* Switch bodies do not have r-values. */
   3635    return NULL;
   3636 }
   3637 
   3638 ir_rvalue *
   3639 ast_case_statement_list::hir(exec_list *instructions,
   3640 			     struct _mesa_glsl_parse_state *state)
   3641 {
   3642    foreach_list_typed (ast_case_statement, case_stmt, link, & this->cases)
   3643       case_stmt->hir(instructions, state);
   3644 
   3645    /* Case statements do not have r-values. */
   3646    return NULL;
   3647 }
   3648 
   3649 ir_rvalue *
   3650 ast_case_statement::hir(exec_list *instructions,
   3651 			struct _mesa_glsl_parse_state *state)
   3652 {
   3653    labels->hir(instructions, state);
   3654 
   3655    /* Conditionally set fallthru state based on break state. */
   3656    ir_constant *const false_val = new(state) ir_constant(false);
   3657    ir_dereference_variable *const deref_is_fallthru_var =
   3658       new(state) ir_dereference_variable(state->switch_state.is_fallthru_var);
   3659    ir_dereference_variable *const deref_is_break_var =
   3660       new(state) ir_dereference_variable(state->switch_state.is_break_var);
   3661    ir_assignment *const reset_fallthru_on_break =
   3662       new(state) ir_assignment(deref_is_fallthru_var,
   3663 			       false_val,
   3664 			       deref_is_break_var);
   3665    instructions->push_tail(reset_fallthru_on_break);
   3666 
   3667    /* Guard case statements depending on fallthru state. */
   3668    ir_dereference_variable *const deref_fallthru_guard =
   3669       new(state) ir_dereference_variable(state->switch_state.is_fallthru_var);
   3670    ir_if *const test_fallthru = new(state) ir_if(deref_fallthru_guard);
   3671 
   3672    foreach_list_typed (ast_node, stmt, link, & this->stmts)
   3673       stmt->hir(& test_fallthru->then_instructions, state);
   3674 
   3675    instructions->push_tail(test_fallthru);
   3676 
   3677    /* Case statements do not have r-values. */
   3678    return NULL;
   3679 }
   3680 
   3681 
   3682 ir_rvalue *
   3683 ast_case_label_list::hir(exec_list *instructions,
   3684 			 struct _mesa_glsl_parse_state *state)
   3685 {
   3686    foreach_list_typed (ast_case_label, label, link, & this->labels)
   3687       label->hir(instructions, state);
   3688 
   3689    /* Case labels do not have r-values. */
   3690    return NULL;
   3691 }
   3692 
   3693 ir_rvalue *
   3694 ast_case_label::hir(exec_list *instructions,
   3695 		    struct _mesa_glsl_parse_state *state)
   3696 {
   3697    void *ctx = state;
   3698 
   3699    ir_dereference_variable *deref_fallthru_var =
   3700       new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var);
   3701 
   3702    ir_rvalue *const true_val = new(ctx) ir_constant(true);
   3703 
   3704    /* If not default case, ... */
   3705    if (this->test_value != NULL) {
   3706       /* Conditionally set fallthru state based on
   3707        * comparison of cached test expression value to case label.
   3708        */
   3709       ir_rvalue *const label_rval = this->test_value->hir(instructions, state);
   3710       ir_constant *label_const = label_rval->constant_expression_value();
   3711 
   3712       if (!label_const) {
   3713 	 YYLTYPE loc = this->test_value->get_location();
   3714 
   3715 	 _mesa_glsl_error(& loc, state,
   3716 			  "switch statement case label must be a "
   3717 			  "constant expression");
   3718 
   3719 	 /* Stuff a dummy value in to allow processing to continue. */
   3720 	 label_const = new(ctx) ir_constant(0);
   3721       } else {
   3722 	 ast_expression *previous_label = (ast_expression *)
   3723 	    hash_table_find(state->switch_state.labels_ht,
   3724 			    (void *)(uintptr_t)label_const->value.u[0]);
   3725 
   3726 	 if (previous_label) {
   3727 	    YYLTYPE loc = this->test_value->get_location();
   3728 	    _mesa_glsl_error(& loc, state,
   3729 			     "duplicate case value");
   3730 
   3731 	    loc = previous_label->get_location();
   3732 	    _mesa_glsl_error(& loc, state,
   3733 			     "this is the previous case label");
   3734 	 } else {
   3735 	    hash_table_insert(state->switch_state.labels_ht,
   3736 			      this->test_value,
   3737 			      (void *)(uintptr_t)label_const->value.u[0]);
   3738 	 }
   3739       }
   3740 
   3741       ir_dereference_variable *deref_test_var =
   3742 	 new(ctx) ir_dereference_variable(state->switch_state.test_var);
   3743 
   3744       ir_rvalue *const test_cond = new(ctx) ir_expression(ir_binop_all_equal,
   3745 							  label_const,
   3746 							  deref_test_var);
   3747 
   3748       ir_assignment *set_fallthru_on_test =
   3749 	 new(ctx) ir_assignment(deref_fallthru_var,
   3750 				true_val,
   3751 				test_cond);
   3752 
   3753       instructions->push_tail(set_fallthru_on_test);
   3754    } else { /* default case */
   3755       if (state->switch_state.previous_default) {
   3756 	 YYLTYPE loc = this->get_location();
   3757 	 _mesa_glsl_error(& loc, state,
   3758 			  "multiple default labels in one switch");
   3759 
   3760 	 loc = state->switch_state.previous_default->get_location();
   3761 	 _mesa_glsl_error(& loc, state,
   3762 			  "this is the first default label");
   3763       }
   3764       state->switch_state.previous_default = this;
   3765 
   3766       /* Set falltrhu state. */
   3767       ir_assignment *set_fallthru =
   3768 	 new(ctx) ir_assignment(deref_fallthru_var, true_val);
   3769 
   3770       instructions->push_tail(set_fallthru);
   3771    }
   3772 
   3773    /* Case statements do not have r-values. */
   3774    return NULL;
   3775 }
   3776 
   3777 void
   3778 ast_iteration_statement::condition_to_hir(ir_loop *stmt,
   3779 					  struct _mesa_glsl_parse_state *state)
   3780 {
   3781    void *ctx = state;
   3782 
   3783    if (condition != NULL) {
   3784       ir_rvalue *const cond =
   3785 	 condition->hir(& stmt->body_instructions, state);
   3786 
   3787       if ((cond == NULL)
   3788 	  || !cond->type->is_boolean() || !cond->type->is_scalar()) {
   3789 	 YYLTYPE loc = condition->get_location();
   3790 
   3791 	 _mesa_glsl_error(& loc, state,
   3792 			  "loop condition must be scalar boolean");
   3793       } else {
   3794 	 /* As the first code in the loop body, generate a block that looks
   3795 	  * like 'if (!condition) break;' as the loop termination condition.
   3796 	  */
   3797 	 ir_rvalue *const not_cond =
   3798 	    new(ctx) ir_expression(ir_unop_logic_not, cond);
   3799 
   3800 	 ir_if *const if_stmt = new(ctx) ir_if(not_cond);
   3801 
   3802 	 ir_jump *const break_stmt =
   3803 	    new(ctx) ir_loop_jump(ir_loop_jump::jump_break);
   3804 
   3805 	 if_stmt->then_instructions.push_tail(break_stmt);
   3806 	 stmt->body_instructions.push_tail(if_stmt);
   3807       }
   3808    }
   3809 }
   3810 
   3811 
   3812 ir_rvalue *
   3813 ast_iteration_statement::hir(exec_list *instructions,
   3814 			     struct _mesa_glsl_parse_state *state)
   3815 {
   3816    void *ctx = state;
   3817 
   3818    /* For-loops and while-loops start a new scope, but do-while loops do not.
   3819     */
   3820    if (mode != ast_do_while)
   3821       state->symbols->push_scope();
   3822 
   3823    if (init_statement != NULL)
   3824       init_statement->hir(instructions, state);
   3825 
   3826    ir_loop *const stmt = new(ctx) ir_loop();
   3827    instructions->push_tail(stmt);
   3828 
   3829    /* Track the current loop nesting. */
   3830    ast_iteration_statement *nesting_ast = state->loop_nesting_ast;
   3831 
   3832    state->loop_nesting_ast = this;
   3833 
   3834    /* Likewise, indicate that following code is closest to a loop,
   3835     * NOT closest to a switch.
   3836     */
   3837    bool saved_is_switch_innermost = state->switch_state.is_switch_innermost;
   3838    state->switch_state.is_switch_innermost = false;
   3839 
   3840    if (mode != ast_do_while)
   3841       condition_to_hir(stmt, state);
   3842 
   3843    if (body != NULL)
   3844       body->hir(& stmt->body_instructions, state);
   3845 
   3846    if (rest_expression != NULL)
   3847       rest_expression->hir(& stmt->body_instructions, state);
   3848 
   3849    if (mode == ast_do_while)
   3850       condition_to_hir(stmt, state);
   3851 
   3852    if (mode != ast_do_while)
   3853       state->symbols->pop_scope();
   3854 
   3855    /* Restore previous nesting before returning. */
   3856    state->loop_nesting_ast = nesting_ast;
   3857    state->switch_state.is_switch_innermost = saved_is_switch_innermost;
   3858 
   3859    /* Loops do not have r-values.
   3860     */
   3861    return NULL;
   3862 }
   3863 
   3864 
   3865 ir_rvalue *
   3866 ast_type_specifier::hir(exec_list *instructions,
   3867 			  struct _mesa_glsl_parse_state *state)
   3868 {
   3869    if (!this->is_precision_statement && this->structure == NULL)
   3870       return NULL;
   3871 
   3872    YYLTYPE loc = this->get_location();
   3873 
   3874    if (this->precision != ast_precision_none
   3875        && state->language_version != 100
   3876        && state->language_version < 130) {
   3877       _mesa_glsl_error(&loc, state,
   3878                        "precision qualifiers exist only in "
   3879                        "GLSL ES 1.00, and GLSL 1.30 and later");
   3880       return NULL;
   3881    }
   3882    if (this->precision != ast_precision_none
   3883        && this->structure != NULL) {
   3884       _mesa_glsl_error(&loc, state,
   3885                        "precision qualifiers do not apply to structures");
   3886       return NULL;
   3887    }
   3888 
   3889    /* If this is a precision statement, check that the type to which it is
   3890     * applied is either float or int.
   3891     *
   3892     * From section 4.5.3 of the GLSL 1.30 spec:
   3893     *    "The precision statement
   3894     *       precision precision-qualifier type;
   3895     *    can be used to establish a default precision qualifier. The type
   3896     *    field can be either int or float [...].  Any other types or
   3897     *    qualifiers will result in an error.
   3898     */
   3899    if (this->is_precision_statement) {
   3900       assert(this->precision != ast_precision_none);
   3901       assert(this->structure == NULL); /* The check for structures was
   3902                                         * performed above. */
   3903       if (this->is_array) {
   3904          _mesa_glsl_error(&loc, state,
   3905                           "default precision statements do not apply to "
   3906                           "arrays");
   3907          return NULL;
   3908       }
   3909       if (strcmp(this->type_name, "float") != 0 &&
   3910 	  strcmp(this->type_name, "int") != 0) {
   3911          _mesa_glsl_error(&loc, state,
   3912                           "default precision statements apply only to types "
   3913                           "float and int");
   3914          return NULL;
   3915       }
   3916 
   3917       /* FINISHME: Translate precision statements into IR. */
   3918       return NULL;
   3919    }
   3920 
   3921    if (this->structure != NULL)
   3922       return this->structure->hir(instructions, state);
   3923 
   3924    return NULL;
   3925 }
   3926 
   3927 
   3928 ir_rvalue *
   3929 ast_struct_specifier::hir(exec_list *instructions,
   3930 			  struct _mesa_glsl_parse_state *state)
   3931 {
   3932    unsigned decl_count = 0;
   3933 
   3934    /* Make an initial pass over the list of structure fields to determine how
   3935     * many there are.  Each element in this list is an ast_declarator_list.
   3936     * This means that we actually need to count the number of elements in the
   3937     * 'declarations' list in each of the elements.
   3938     */
   3939    foreach_list_typed (ast_declarator_list, decl_list, link,
   3940 		       &this->declarations) {
   3941       foreach_list_const (decl_ptr, & decl_list->declarations) {
   3942 	 decl_count++;
   3943       }
   3944    }
   3945 
   3946    /* Allocate storage for the structure fields and process the field
   3947     * declarations.  As the declarations are processed, try to also convert
   3948     * the types to HIR.  This ensures that structure definitions embedded in
   3949     * other structure definitions are processed.
   3950     */
   3951    glsl_struct_field *const fields = ralloc_array(state, glsl_struct_field,
   3952 						  decl_count);
   3953 
   3954    unsigned i = 0;
   3955    foreach_list_typed (ast_declarator_list, decl_list, link,
   3956 		       &this->declarations) {
   3957       const char *type_name;
   3958 
   3959       decl_list->type->specifier->hir(instructions, state);
   3960 
   3961       /* Section 10.9 of the GLSL ES 1.00 specification states that
   3962        * embedded structure definitions have been removed from the language.
   3963        */
   3964       if (state->es_shader && decl_list->type->specifier->structure != NULL) {
   3965 	 YYLTYPE loc = this->get_location();
   3966 	 _mesa_glsl_error(&loc, state, "Embedded structure definitions are "
   3967 			  "not allowed in GLSL ES 1.00.");
   3968       }
   3969 
   3970       const glsl_type *decl_type =
   3971 	 decl_list->type->specifier->glsl_type(& type_name, state);
   3972 
   3973       foreach_list_typed (ast_declaration, decl, link,
   3974 			  &decl_list->declarations) {
   3975 	 const struct glsl_type *field_type = decl_type;
   3976 	 if (decl->is_array) {
   3977 	    YYLTYPE loc = decl->get_location();
   3978 	    field_type = process_array_type(&loc, decl_type, decl->array_size,
   3979 					    state);
   3980 	 }
   3981 	 fields[i].type = (field_type != NULL)
   3982 	    ? field_type : glsl_type::error_type;
   3983 	 fields[i].name = decl->identifier;
   3984 	 i++;
   3985       }
   3986    }
   3987 
   3988    assert(i == decl_count);
   3989 
   3990    const glsl_type *t =
   3991       glsl_type::get_record_instance(fields, decl_count, this->name);
   3992 
   3993    YYLTYPE loc = this->get_location();
   3994    if (!state->symbols->add_type(name, t)) {
   3995       _mesa_glsl_error(& loc, state, "struct `%s' previously defined", name);
   3996    } else {
   3997       const glsl_type **s = reralloc(state, state->user_structures,
   3998 				     const glsl_type *,
   3999 				     state->num_user_structures + 1);
   4000       if (s != NULL) {
   4001 	 s[state->num_user_structures] = t;
   4002 	 state->user_structures = s;
   4003 	 state->num_user_structures++;
   4004       }
   4005    }
   4006 
   4007    /* Structure type definitions do not have r-values.
   4008     */
   4009    return NULL;
   4010 }
   4011 
   4012 static struct gl_uniform_block *
   4013 get_next_uniform_block(struct _mesa_glsl_parse_state *state)
   4014 {
   4015    if (state->num_uniform_blocks >= state->uniform_block_array_size) {
   4016       state->uniform_block_array_size *= 2;
   4017       if (state->uniform_block_array_size <= 4)
   4018 	 state->uniform_block_array_size = 4;
   4019 
   4020       state->uniform_blocks = reralloc(state,
   4021 				       state->uniform_blocks,
   4022 				       struct gl_uniform_block,
   4023 				       state->uniform_block_array_size);
   4024    }
   4025 
   4026    memset(&state->uniform_blocks[state->num_uniform_blocks],
   4027 	  0, sizeof(*state->uniform_blocks));
   4028    return &state->uniform_blocks[state->num_uniform_blocks++];
   4029 }
   4030 
   4031 ir_rvalue *
   4032 ast_uniform_block::hir(exec_list *instructions,
   4033 		       struct _mesa_glsl_parse_state *state)
   4034 {
   4035    /* The ast_uniform_block has a list of ast_declarator_lists.  We
   4036     * need to turn those into ir_variables with an association
   4037     * with this uniform block.
   4038     */
   4039    struct gl_uniform_block *ubo = get_next_uniform_block(state);
   4040    ubo->Name = ralloc_strdup(state->uniform_blocks, this->block_name);
   4041 
   4042    if (!state->symbols->add_uniform_block(ubo)) {
   4043       YYLTYPE loc = this->get_location();
   4044       _mesa_glsl_error(&loc, state, "Uniform block name `%s' already taken in "
   4045                        "the current scope.\n", ubo->Name);
   4046    }
   4047 
   4048    unsigned int num_variables = 0;
   4049    foreach_list_typed(ast_declarator_list, decl_list, link, &declarations) {
   4050       foreach_list_const(node, &decl_list->declarations) {
   4051 	 num_variables++;
   4052       }
   4053    }
   4054 
   4055    bool block_row_major = this->layout.flags.q.row_major;
   4056 
   4057    ubo->Uniforms = rzalloc_array(state->uniform_blocks,
   4058 				 struct gl_uniform_buffer_variable,
   4059 				 num_variables);
   4060 
   4061    foreach_list_typed(ast_declarator_list, decl_list, link, &declarations) {
   4062       exec_list declared_variables;
   4063 
   4064       decl_list->hir(&declared_variables, state);
   4065 
   4066       foreach_list_const(node, &declared_variables) {
   4067 	 struct ir_variable *var = (ir_variable *)node;
   4068 
   4069 	 struct gl_uniform_buffer_variable *ubo_var =
   4070 	    &ubo->Uniforms[ubo->NumUniforms++];
   4071 
   4072 	 var->uniform_block = ubo - state->uniform_blocks;
   4073 
   4074 	 ubo_var->Name = ralloc_strdup(state->uniform_blocks, var->name);
   4075 	 ubo_var->Type = var->type;
   4076 	 ubo_var->Buffer = ubo - state->uniform_blocks;
   4077 	 ubo_var->Offset = 0; /* Assigned at link time. */
   4078 
   4079 	 if (var->type->is_matrix() ||
   4080 	     (var->type->is_array() && var->type->fields.array->is_matrix())) {
   4081 	    ubo_var->RowMajor = block_row_major;
   4082 	    if (decl_list->type->qualifier.flags.q.row_major)
   4083 	       ubo_var->RowMajor = true;
   4084 	    else if (decl_list->type->qualifier.flags.q.column_major)
   4085 	       ubo_var->RowMajor = false;
   4086 	 }
   4087 
   4088 	 /* From the GL_ARB_uniform_buffer_object spec:
   4089 	  *
   4090 	  *     "Sampler types are not allowed inside of uniform
   4091 	  *      blocks. All other types, arrays, and structures
   4092 	  *      allowed for uniforms are allowed within a uniform
   4093 	  *      block."
   4094 	  */
   4095 	 if (var->type->contains_sampler()) {
   4096 	    YYLTYPE loc = decl_list->get_location();
   4097 	    _mesa_glsl_error(&loc, state,
   4098 			     "Uniform in non-default uniform block contains sampler\n");
   4099 	 }
   4100       }
   4101 
   4102       instructions->append_list(&declared_variables);
   4103    }
   4104 
   4105    return NULL;
   4106 }
   4107 
   4108 static void
   4109 detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
   4110 			       exec_list *instructions)
   4111 {
   4112    bool gl_FragColor_assigned = false;
   4113    bool gl_FragData_assigned = false;
   4114    bool user_defined_fs_output_assigned = false;
   4115    ir_variable *user_defined_fs_output = NULL;
   4116 
   4117    /* It would be nice to have proper location information. */
   4118    YYLTYPE loc;
   4119    memset(&loc, 0, sizeof(loc));
   4120 
   4121    foreach_list(node, instructions) {
   4122       ir_variable *var = ((ir_instruction *)node)->as_variable();
   4123 
   4124       if (!var || !var->assigned)
   4125 	 continue;
   4126 
   4127       if (strcmp(var->name, "gl_FragColor") == 0)
   4128 	 gl_FragColor_assigned = true;
   4129       else if (strcmp(var->name, "gl_FragData") == 0)
   4130 	 gl_FragData_assigned = true;
   4131       else if (strncmp(var->name, "gl_", 3) != 0) {
   4132 	 if (state->target == fragment_shader &&
   4133 	     (var->mode == ir_var_out || var->mode == ir_var_inout)) {
   4134 	    user_defined_fs_output_assigned = true;
   4135 	    user_defined_fs_output = var;
   4136 	 }
   4137       }
   4138    }
   4139 
   4140    /* From the GLSL 1.30 spec:
   4141     *
   4142     *     "If a shader statically assigns a value to gl_FragColor, it
   4143     *      may not assign a value to any element of gl_FragData. If a
   4144     *      shader statically writes a value to any element of
   4145     *      gl_FragData, it may not assign a value to
   4146     *      gl_FragColor. That is, a shader may assign values to either
   4147     *      gl_FragColor or gl_FragData, but not both. Multiple shaders
   4148     *      linked together must also consistently write just one of
   4149     *      these variables.  Similarly, if user declared output
   4150     *      variables are in use (statically assigned to), then the
   4151     *      built-in variables gl_FragColor and gl_FragData may not be
   4152     *      assigned to. These incorrect usages all generate compile
   4153     *      time errors."
   4154     */
   4155    if (gl_FragColor_assigned && gl_FragData_assigned) {
   4156       _mesa_glsl_error(&loc, state, "fragment shader writes to both "
   4157 		       "`gl_FragColor' and `gl_FragData'\n");
   4158    } else if (gl_FragColor_assigned && user_defined_fs_output_assigned) {
   4159       _mesa_glsl_error(&loc, state, "fragment shader writes to both "
   4160 		       "`gl_FragColor' and `%s'\n",
   4161 		       user_defined_fs_output->name);
   4162    } else if (gl_FragData_assigned && user_defined_fs_output_assigned) {
   4163       _mesa_glsl_error(&loc, state, "fragment shader writes to both "
   4164 		       "`gl_FragData' and `%s'\n",
   4165 		       user_defined_fs_output->name);
   4166    }
   4167 }
   4168