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