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
