• Erik Faye-Lund 's avatar
    glsl: do not allow implicit casts of unsized array initializers · 742dace8
    Erik Faye-Lund authored
    The GLSL 4.6 specification (section 4.1.14. "Implicit Conversions")
    says:
    
      "There are no implicit array or structure conversions. For
       example, an array of int cannot be implicitly converted to an
       array of float."
    
    So let's add a check in place when assigning array initializers to
    implicitly sized arrays, to avoid incorrectly allowing code on the
    form:
    
    int[] foo = float[](1.0, 2.0, 3.0)
    
    This fixes the following dEQP test-cases:
    - dEQP-GLES31.functional.shaders.implicit_conversions.es31.invalid.arrays.int_to_float_vertex
    - dEQP-GLES31.functional.shaders.implicit_conversions.es31.invalid.arrays.int_to_float_fragment
    - dEQP-GLES31.functional.shaders.implicit_conversions.es31.invalid.arrays.int_to_uint_vertex
    - dEQP-GLES31.functional.shaders.implicit_conversions.es31.invalid.arrays.int_to_uint_fragment
    - dEQP-GLES31.functional.shaders.implicit_conversions.es31.invalid.arrays.uint_to_float_vertex
    - dEQP-GLES31.functional.shaders.implicit_conversions.es31.invalid.arrays.uint_to_float_fragment
    - dEQP-GLES31.functional.shaders.implicit_conversions.es32.invalid.arrays.int_to_float_vertex
    - dEQP-GLES31.functional.shaders.implicit_conversions.es32.invalid.arrays.int_to_float_fragment
    - dEQP-GLES31.functional.shaders.implicit_conversions.es32.invalid.arrays.int_to_uint_vertex
    - dEQP-GLES31.functional.shaders.implicit_conversions.es32.invalid.arrays.int_to_uint_fragment
    - dEQP-GLES31.functional.shaders.implicit_conversions.es32.invalid.arrays.uint_to_float_vertex
    - dEQP-GLES31.functional.shaders.implicit_conversions.es32.invalid.arrays.uint_to_float_fragment
    Signed-off-by: Erik Faye-Lund 's avatarErik Faye-Lund <erik.faye-lund@collabora.com>
    Reviewed-by: Tapani Pälli's avatarTapani Pälli <tapani.palli@intel.com>
    742dace8
ast_to_hir.cpp 332 KB