1#version 430 core
2
3int f(int a, int b, int c)
4{
5	int a = b;  // ERROR, redefinition
6
7    {
8		float a = float(a) + 1.0; // okay
9    }
10
11	return a;
12}
13
14int f(int a, int b, int c);  // okay to redeclare
15
16bool b;
17float b(int a);      // ERROR: redefinition
18
19float c(int a);
20bool c;              // ERROR: redefinition
21
22float f;             // ERROR: redefinition
23float tan;           // okay, hides built-in function
24float sin(float x);  // okay, can redefine built-in functions
25float cos(float x)   // okay, can redefine built-in functions
26{
27	return 1.0;
28}
29bool radians(bool x) // okay, can overload built-in functions
30{
31    return true;
32}
33
34invariant gl_Position;
35
36void main()
37{
38    int g();    // okay
39    g();
40
41    float sin; // okay
42    sin;
43    sin(0.7);  // ERROR, use of hidden function
44    f(1,2,3);
45
46    float f;    // hides f()
47    f = 3.0;
48
49    gl_Position = vec4(f);
50
51    for (int f = 0; f < 10; ++f)
52        ++f;
53
54    int x = 1;
55    {
56        float x = 2.0, /* 2nd x visible here */ y = x; // y is initialized to 2
57        int z = z; // ERROR: z not previously defined.
58    }
59    {
60        int x = x; // x is initialized to '1'
61    }
62
63    struct S
64    {
65        int x;
66    };
67    {
68        S S = S(0); // 'S' is only visible as a struct and constructor
69        S.x;        // 'S' is now visible as a variable
70    }
71
72    int degrees;
73    degrees(3.2);  // ERROR, use of hidden built-in function
74}
75