group valid "Valid scoping and name redeclaration cases" case local_variable_hides_global_variable version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int a = -1; void main() { ${SETUP} int a = in0; out0 = a; ${OUTPUT} } "" end case block_variable_hides_local_variable version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} void main() { ${SETUP} int a = in0; { int a = -1; } out0 = a; ${OUTPUT} } "" end case block_variable_hides_global_variable version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int a = -1; void main() { ${SETUP} { int a = in0; out0 = a; } ${OUTPUT} } "" end case for_init_statement_variable_hides_local_variable version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} void main() { ${SETUP} int a = in0; for (int a = 0; a < 10; a++) { } out0 = a; ${OUTPUT} } "" end case while_condition_variable_hides_local_variable version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} void main() { ${SETUP} int a = in0; int i = 0; while (bool a = (i < 1)) { i++; } out0 = a; ${OUTPUT} } "" end case for_init_statement_variable_hides_global_variable version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int a = 5; void main() { ${SETUP} for (int a = 0; a < 10; a++) { } out0 = in0 + a - 5; ${OUTPUT} } "" end case while_condition_variable_hides_global_variable version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int a = 5; void main() { ${SETUP} int i = 0; while (bool a = (i < 1)) { i++; } out0 = in0 + a - 5; ${OUTPUT} } "" end case variable_in_if_hides_global_variable version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int a = 1; void main() { ${SETUP} if (true) int a = 42; out0 = a*in0; ${OUTPUT} } "" end case variable_from_outer_scope_visible_in_initializer version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} void main() { ${SETUP} int a = in0; { int a = a+5, b = a-5; out0 = b; a = 42; } out0 = out0 + a - in0; ${OUTPUT} } "" end case local_int_variable_hides_struct_type version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} struct S { int val; }; void main() { ${SETUP} int S = S(in0).val; out0 = S; ${OUTPUT} } "" end case local_struct_variable_hides_struct_type version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} struct S { int val; }; void main() { ${SETUP} S S = S(in0); out0 = S.val; ${OUTPUT} } "" end case local_variable_hides_function version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int foo (int x) { return x; } void main() { ${SETUP} int foo = in0; out0 = foo; ${OUTPUT} } "" end case function_parameter_hides_global_variable version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int a = -1; int func (int a) { return a; } void main() { ${SETUP} out0 = func(in0); ${OUTPUT} } "" end case function_parameter_hides_struct_type version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} struct S { int x; }; int func (int S) { return S; } void main() { ${SETUP} out0 = func(in0); ${OUTPUT} } "" end case function_parameter_hides_function version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int func (int func) { return func; } void main() { ${SETUP} out0 = func(in0); ${OUTPUT} } "" end case local_variable_in_inner_scope_hides_function_parameter version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int func (int inp, int x) { { int x = 5; return inp + x - 5; } } void main() { ${SETUP} out0 = func(in0, 42); ${OUTPUT} } "" end case redeclare_function version 310 es values { input int in0 = [ 1 | 2 | 3 ]; output int out0 = [ 1 | 2 | 3 ]; } both "" #version 310 es precision highp float; precision highp int; ${DECLARATIONS} int func (int x); int func (int); int func (int inp) { return inp; } void main() { ${SETUP} out0 = func(in0); ${OUTPUT} } "" end end