1617a3babSopenharmony_ci// okay
2617a3babSopenharmony_ci#version 100
3617a3babSopenharmony_ciint a[3] = { 2, 3, 4, };  // ERROR (lots)
4617a3babSopenharmony_ci#version 100
5617a3babSopenharmony_ciint uint;
6617a3babSopenharmony_ci
7617a3babSopenharmony_ciattribute vec4 v[3];     // ERROR
8617a3babSopenharmony_ci
9617a3babSopenharmony_cifloat f = 2;             // ERROR
10617a3babSopenharmony_ci
11617a3babSopenharmony_ciuniform block {          // ERROR
12617a3babSopenharmony_ci    int x;
13617a3babSopenharmony_ci};
14617a3babSopenharmony_ci
15617a3babSopenharmony_civoid foo(float);
16617a3babSopenharmony_ci
17617a3babSopenharmony_civoid main()
18617a3babSopenharmony_ci{
19617a3babSopenharmony_ci    foo(3);              // ERROR
20617a3babSopenharmony_ci    int s = 1 << 4;      // ERROR
21617a3babSopenharmony_ci    s = 16 >> 2;         // ERROR
22617a3babSopenharmony_ci    if (a == a);         // ERROR
23617a3babSopenharmony_ci    int b, c;
24617a3babSopenharmony_ci    b = c & 4;           // ERROR
25617a3babSopenharmony_ci    b = c % 4;           // ERROR
26617a3babSopenharmony_ci    b = c | 4;           // ERROR
27617a3babSopenharmony_ci    b >>= 2;             // ERROR
28617a3babSopenharmony_ci    b <<= 2;             // ERROR
29617a3babSopenharmony_ci    b %= 3;              // ERROR
30617a3babSopenharmony_ci
31617a3babSopenharmony_ci    struct S {
32617a3babSopenharmony_ci        float f;
33617a3babSopenharmony_ci        float a[10];
34617a3babSopenharmony_ci    } s1, s2;
35617a3babSopenharmony_ci
36617a3babSopenharmony_ci    s1 = s2;             // ERROR
37617a3babSopenharmony_ci    if (s1 == s2);       // ERROR
38617a3babSopenharmony_ci    if (s1 != s2);       // ERROR
39617a3babSopenharmony_ci
40617a3babSopenharmony_ci    switch(b) {          // ERROR
41617a3babSopenharmony_ci    }
42617a3babSopenharmony_ci}
43617a3babSopenharmony_ci
44617a3babSopenharmony_ciinvariant gl_FragColor;
45617a3babSopenharmony_cifloat fa[];              // ERROR
46617a3babSopenharmony_cifloat f13;
47617a3babSopenharmony_ciinvariant f13;           // ERROR
48617a3babSopenharmony_cistruct S { int a; };
49617a3babSopenharmony_ciinvariant S;             // ERROR, not an input or output
50617a3babSopenharmony_ciinvariant float fi;      // ERROR
51617a3babSopenharmony_civarying vec4 av;
52617a3babSopenharmony_ciinvariant av;            // okay in v100
53617a3babSopenharmony_ci
54617a3babSopenharmony_civoid foo10()
55617a3babSopenharmony_ci{
56617a3babSopenharmony_ci    invariant f;         // ERROR
57617a3babSopenharmony_ci    invariant float f2;  // ERROR
58617a3babSopenharmony_ci    float f3;
59617a3babSopenharmony_ci    invariant f3;        // ERROR
60617a3babSopenharmony_ci}
61617a3babSopenharmony_ci
62617a3babSopenharmony_ciuniform vec2 uv2;
63617a3babSopenharmony_ciinvariant uv2;              // ERROR
64617a3babSopenharmony_ciinvariant uniform vec3 uv3; // ERROR
65617a3babSopenharmony_ci
66617a3babSopenharmony_cisampler2D glob2D;           // ERROR
67617a3babSopenharmony_civoid f11(sampler2D p2d)
68617a3babSopenharmony_ci{
69617a3babSopenharmony_ci    sampler2D v2D;          // ERROR
70617a3babSopenharmony_ci}
71617a3babSopenharmony_civarying sampler2D vary2D;   // ERROR
72617a3babSopenharmony_ci
73617a3babSopenharmony_cistruct sp {
74617a3babSopenharmony_ci    highp float f;
75617a3babSopenharmony_ci    in float g;             // ERROR
76617a3babSopenharmony_ci    uniform float h;        // ERROR
77617a3babSopenharmony_ci    invariant float i;      // ERROR
78617a3babSopenharmony_ci};
79617a3babSopenharmony_ci
80617a3babSopenharmony_ciuniform sampler3D s3D;      // ERROR
81617a3babSopenharmony_ci
82617a3babSopenharmony_ci#extension GL_OES_texture_3D : enable
83617a3babSopenharmony_ci
84617a3babSopenharmony_ciprecision highp sampler3D;
85617a3babSopenharmony_ciuniform sampler3D s3D2;
86617a3babSopenharmony_ci
87617a3babSopenharmony_civoid foo234()
88617a3babSopenharmony_ci{
89617a3babSopenharmony_ci    texture3D(s3D2, vec3(0.2), 0.2);
90617a3babSopenharmony_ci    texture3DProj(s3D2, v[1], 0.4);
91617a3babSopenharmony_ci    dFdx(v[0]);    // ERROR
92617a3babSopenharmony_ci    dFdy(3.2);     // ERROR
93617a3babSopenharmony_ci    fwidth(f13);   // ERROR
94617a3babSopenharmony_ci}
95617a3babSopenharmony_ci
96617a3babSopenharmony_ci#extension GL_OES_standard_derivatives : enable
97617a3babSopenharmony_ci
98617a3babSopenharmony_civoid foo236()
99617a3babSopenharmony_ci{
100617a3babSopenharmony_ci    dFdx(v[0]);
101617a3babSopenharmony_ci    dFdy(3.2);
102617a3babSopenharmony_ci    fwidth(f13);
103617a3babSopenharmony_ci    gl_FragDepth = f13;    // ERROR
104617a3babSopenharmony_ci    gl_FragDepthEXT = f13; // ERROR
105617a3babSopenharmony_ci}
106617a3babSopenharmony_ci
107617a3babSopenharmony_ci#extension GL_EXT_frag_depth : enable
108617a3babSopenharmony_ci
109617a3babSopenharmony_civoid foo239()
110617a3babSopenharmony_ci{
111617a3babSopenharmony_ci    gl_FragDepth = f13;    // ERROR
112617a3babSopenharmony_ci    gl_FragDepthEXT = f13;
113617a3babSopenharmony_ci}
114617a3babSopenharmony_ci
115617a3babSopenharmony_ci#extension GL_OES_EGL_image_external : enable
116617a3babSopenharmony_ci
117617a3babSopenharmony_ciuniform samplerExternalOES sExt;
118617a3babSopenharmony_ci
119617a3babSopenharmony_civoid foo245()
120617a3babSopenharmony_ci{
121617a3babSopenharmony_ci    texture2D(sExt, vec2(0.2));
122617a3babSopenharmony_ci    texture2DProj(sExt, vec3(f13));
123617a3babSopenharmony_ci    texture2DProj(sExt, v[2]);
124617a3babSopenharmony_ci}
125617a3babSopenharmony_ci
126617a3babSopenharmony_ciprecision mediump samplerExternalOES;
127617a3babSopenharmony_ciuniform samplerExternalOES mediumExt;
128617a3babSopenharmony_ciuniform highp samplerExternalOES highExt;
129617a3babSopenharmony_ci
130617a3babSopenharmony_civoid foo246()
131617a3babSopenharmony_ci{
132617a3babSopenharmony_ci    texture2D(mediumExt, vec2(0.2));
133617a3babSopenharmony_ci    texture2DProj(highExt, v[2]);
134617a3babSopenharmony_ci    texture3D(sExt, vec3(f13));   // ERROR
135617a3babSopenharmony_ci    texture2DProjLod(sExt, vec3(f13), f13);  // ERROR
136617a3babSopenharmony_ci    int a;
137617a3babSopenharmony_ci    ~a;    // ERROR
138617a3babSopenharmony_ci    a | a; // ERROR
139617a3babSopenharmony_ci    a & a; // ERROR
140617a3babSopenharmony_ci}
141617a3babSopenharmony_ci
142617a3babSopenharmony_ci#extension GL_OES_EGL_image_external : disable
143617a3babSopenharmony_ciuniform sampler2D s2Dg;
144617a3babSopenharmony_ci
145617a3babSopenharmony_ciint foo203940(int a, float b, float a)  // ERROR, a redefined
146617a3babSopenharmony_ci{
147617a3babSopenharmony_ci    texture2DProjGradEXT(s2Dg, vec3(f13), uv2, uv2);  // ERROR, extension not enabled
148617a3babSopenharmony_ci    return a;
149617a3babSopenharmony_ci}
150617a3babSopenharmony_ci
151617a3babSopenharmony_cifloat f123 = 4.0f;   // ERROR
152617a3babSopenharmony_cifloat f124 = 5e10F;  // ERROR
153617a3babSopenharmony_ci
154617a3babSopenharmony_ci#extension GL_EXT_shader_texture_lod : enable
155617a3babSopenharmony_ci
156617a3babSopenharmony_ciuniform samplerCube sCube;
157617a3babSopenharmony_ci
158617a3babSopenharmony_civoid foo323433()
159617a3babSopenharmony_ci{
160617a3babSopenharmony_ci    texture2DLodEXT(s2Dg, uv2, f13);
161617a3babSopenharmony_ci    texture2DProjGradEXT(s2Dg, vec3(f13), uv2, uv2);
162617a3babSopenharmony_ci    texture2DGradEXT(s2Dg, uv2, uv2, uv2);
163617a3babSopenharmony_ci    textureCubeGradEXT(sCube, vec3(f13), vec3(f13), vec3(f13));
164617a3babSopenharmony_ci}
165617a3babSopenharmony_ci
166617a3babSopenharmony_ciint fgfg(float f, mediump int i);
167617a3babSopenharmony_ciint fgfg(float f, highp int i) { return 2; }   // ERROR, precision qualifier difference
168617a3babSopenharmony_ci
169617a3babSopenharmony_ciint fffg(float f);
170617a3babSopenharmony_ciint fffg(float f);  // ERROR, can't have multiple prototypes 
171617a3babSopenharmony_ci
172617a3babSopenharmony_ciint gggf(float f);
173617a3babSopenharmony_ciint gggf(float f) { return 2; }
174617a3babSopenharmony_ci
175617a3babSopenharmony_ciint agggf(float f) { return 2; }
176617a3babSopenharmony_ciint agggf(float f);
177617a3babSopenharmony_ciint agggf(float f);  // ERROR, second prototype
178617a3babSopenharmony_ci
179617a3babSopenharmony_civarying struct SSS { float f; } s; // ERROR
180617a3babSopenharmony_ci
181617a3babSopenharmony_ciint vf(void);
182617a3babSopenharmony_ciint vf2();
183617a3babSopenharmony_ciint vf3(void v);      // ERROR
184617a3babSopenharmony_ciint vf4(int, void);   // ERROR
185617a3babSopenharmony_ciint vf5(int, void v); // ERROR
186617a3babSopenharmony_ci
187617a3babSopenharmony_civoid badswizzle()
188617a3babSopenharmony_ci{
189617a3babSopenharmony_ci    vec3 a[5];
190617a3babSopenharmony_ci    a.y;        // ERROR, no array swizzle
191617a3babSopenharmony_ci    a.zy;       // ERROR, no array swizzle
192617a3babSopenharmony_ci    a.nothing;  // ERROR
193617a3babSopenharmony_ci    a.length(); // ERROR, not this version
194617a3babSopenharmony_ci    a.method(); // ERROR
195617a3babSopenharmony_ci}
196617a3babSopenharmony_ci
197617a3babSopenharmony_cifloat fooinit();
198617a3babSopenharmony_ci
199617a3babSopenharmony_cifloat fooinittest()
200617a3babSopenharmony_ci{
201617a3babSopenharmony_ci    return fooinit();
202617a3babSopenharmony_ci}
203617a3babSopenharmony_ci
204617a3babSopenharmony_ci// Test extension GL_EXT_blend_func_extended
205617a3babSopenharmony_civoid blendFuncFail() // Error since extension GL_EXT_blend_func_extended is disabled
206617a3babSopenharmony_ci{
207617a3babSopenharmony_ci    gl_SecondaryFragColorEXT = vec4(1.0);   
208617a3babSopenharmony_ci    gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1);
209617a3babSopenharmony_ci}
210617a3babSopenharmony_ci#extension GL_EXT_blend_func_extended : enable
211617a3babSopenharmony_civoid blendFunc() 
212617a3babSopenharmony_ci{
213617a3babSopenharmony_ci    gl_SecondaryFragColorEXT = vec4(1.0);
214617a3babSopenharmony_ci    gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT - 1] = vec4(0.1);
215617a3babSopenharmony_ci}
216617a3babSopenharmony_ci
217617a3babSopenharmony_ci// Test extra-function initializers
218617a3babSopenharmony_ciconst float fi1 = 3.0;
219617a3babSopenharmony_ciconst float fi2 = 4.0;
220617a3babSopenharmony_ciconst float fi3 = 5.0;
221617a3babSopenharmony_ci
222617a3babSopenharmony_cifloat fooinit()
223617a3babSopenharmony_ci{
224617a3babSopenharmony_ci    return fi1 + fi2 + fi3;  // should make a constant of 12.0
225617a3babSopenharmony_ci}
226617a3babSopenharmony_ci
227617a3babSopenharmony_ciint init1 = gl_FrontFacing ? 1 : 2; // ERROR, non-const initializer
228617a3babSopenharmony_ci
229617a3babSopenharmony_ci#ifdef GL_EXT_shader_non_constant_global_initializers
230617a3babSopenharmony_ci#extension GL_EXT_shader_non_constant_global_initializers : enable
231617a3babSopenharmony_ci#endif
232617a3babSopenharmony_ci
233617a3babSopenharmony_ciint init2 = gl_FrontFacing ? 1 : 2;
234617a3babSopenharmony_ci
235617a3babSopenharmony_ci#define A__B // error
236617a3babSopenharmony_ciint a__b;    // error
237617a3babSopenharmony_ci
238617a3babSopenharmony_ci#pragma STDGL invariant(all)
239617a3babSopenharmony_ci
240617a3babSopenharmony_ci#line 3000
241617a3babSopenharmony_ci#error line of this error should be 3000
242617a3babSopenharmony_ci
243617a3babSopenharmony_ciuniform samplerExternalOES badExt;  // syntax ERROR
244