1617a3babSopenharmony_ci#version 110
2617a3babSopenharmony_ci
3617a3babSopenharmony_ciint f(int a, int b, int c)
4617a3babSopenharmony_ci{
5617a3babSopenharmony_ci	int a = b;  // ERROR, redefinition
6617a3babSopenharmony_ci
7617a3babSopenharmony_ci    {
8617a3babSopenharmony_ci		float a = float(a) + 1.0; // okay
9617a3babSopenharmony_ci    }
10617a3babSopenharmony_ci
11617a3babSopenharmony_ci	return a;
12617a3babSopenharmony_ci}
13617a3babSopenharmony_ci
14617a3babSopenharmony_ciint f(int a, int b, int c);  // okay to redeclare
15617a3babSopenharmony_ci
16617a3babSopenharmony_cibool b;
17617a3babSopenharmony_cifloat b(int a);      // okay, b and b() are different
18617a3babSopenharmony_ci
19617a3babSopenharmony_cifloat c(int a);
20617a3babSopenharmony_cibool c;              // okay, and c() are different
21617a3babSopenharmony_ci
22617a3babSopenharmony_cifloat f;             // okay f and f() are different
23617a3babSopenharmony_cifloat tan;           // okay, hides built-in function
24617a3babSopenharmony_cifloat sin(float x);  // okay, can redefine built-in functions
25617a3babSopenharmony_cifloat cos(float x)   // okay, can redefine built-in functions
26617a3babSopenharmony_ci{
27617a3babSopenharmony_ci	return 1.0;
28617a3babSopenharmony_ci}
29617a3babSopenharmony_cibool radians(bool x) // okay, can overload built-in functions
30617a3babSopenharmony_ci{
31617a3babSopenharmony_ci    return true;
32617a3babSopenharmony_ci}
33617a3babSopenharmony_ci
34617a3babSopenharmony_ciint gi = f(1,2,3);  // ERROR, can't call user-defined function from global scope
35617a3babSopenharmony_ci
36617a3babSopenharmony_civoid main()
37617a3babSopenharmony_ci{
38617a3babSopenharmony_ci    int g();    // okay
39617a3babSopenharmony_ci    g();
40617a3babSopenharmony_ci
41617a3babSopenharmony_ci    float sin; // okay
42617a3babSopenharmony_ci    sin;
43617a3babSopenharmony_ci    sin(0.7);  // okay
44617a3babSopenharmony_ci    f(1,2,3);
45617a3babSopenharmony_ci
46617a3babSopenharmony_ci    float f;
47617a3babSopenharmony_ci    f = 3.0;
48617a3babSopenharmony_ci
49617a3babSopenharmony_ci    gl_Position = vec4(f);
50617a3babSopenharmony_ci
51617a3babSopenharmony_ci    for (int f = 0; f < 10; ++f)
52617a3babSopenharmony_ci        ++f;
53617a3babSopenharmony_ci
54617a3babSopenharmony_ci    int x = 1;
55617a3babSopenharmony_ci    { 
56617a3babSopenharmony_ci        float x = 2.0, /* 2nd x visible here */ y = x; // y is initialized to 2
57617a3babSopenharmony_ci        int z = z; // ERROR: z not previously defined.
58617a3babSopenharmony_ci    }
59617a3babSopenharmony_ci    {
60617a3babSopenharmony_ci        int x = x; // x is initialized to '1'
61617a3babSopenharmony_ci    }
62617a3babSopenharmony_ci
63617a3babSopenharmony_ci    struct S 
64617a3babSopenharmony_ci    { 
65617a3babSopenharmony_ci        int x; 
66617a3babSopenharmony_ci    };
67617a3babSopenharmony_ci    {
68617a3babSopenharmony_ci        S S = S(0); // 'S' is only visible as a struct and constructor 
69617a3babSopenharmony_ci        S.x;        // 'S' is now visible as a variable
70617a3babSopenharmony_ci    }
71617a3babSopenharmony_ci
72617a3babSopenharmony_ci    int degrees;
73617a3babSopenharmony_ci    degrees(3.2);
74617a3babSopenharmony_ci
75617a3babSopenharmony_ci    {
76617a3babSopenharmony_ci        S s;
77617a3babSopenharmony_ci        s.x = 3;
78617a3babSopenharmony_ci        struct S {   // okay, hides S
79617a3babSopenharmony_ci            bool b;
80617a3babSopenharmony_ci        };
81617a3babSopenharmony_ci        S t;
82617a3babSopenharmony_ci        t.b = true;
83617a3babSopenharmony_ci        struct S {    // ERROR, redefinition of struct S
84617a3babSopenharmony_ci            float f;
85617a3babSopenharmony_ci        };
86617a3babSopenharmony_ci    }
87617a3babSopenharmony_ci}
88