More subtle checking for redeclarations:
- 300 doesn't allow built-in overload, while 100 does, while neither allows redefining - block name can't be reused for block name within the same interface (though, the spec. isn't clear about that, it's easier than verifying member matches, will file bug on it) git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@23984 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
		
							parent
							
								
									4d6570a1b3
								
							
						
					
					
						commit
						a4351c55e8
					
				
										
											Binary file not shown.
										
									
								
							| @ -17,12 +17,16 @@ bool b; | |||||||
| float b(int a);      // ERROR: redefinition | float b(int a);      // ERROR: redefinition | ||||||
| 
 | 
 | ||||||
| float f;             // ERROR: redefinition | float f;             // ERROR: redefinition | ||||||
| float tan;           // ERROR: redefines built-in function | float tan;           // okay, built-in is in an outer scope | ||||||
| float sin(float x);  // ERROR: can't overload built-in functions | float sin(float x);  // ERROR: can't redefine built-in functions | ||||||
| float cos(float x)   // ERROR: can't overload built-in functions | float cos(float x)   // ERROR: can't redefine built-in functions | ||||||
| { | { | ||||||
| 	return 1.0; | 	return 1.0; | ||||||
| } | } | ||||||
|  | bool radians(bool x) // okay, can overload built-in functions | ||||||
|  | { | ||||||
|  |     return true; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| invariant gl_Position; | invariant gl_Position; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -52,11 +52,11 @@ out vec4 ov3;  // stream should be 3 | |||||||
| 
 | 
 | ||||||
| layout(stream = 6) out ooutb { vec4 a; } ouuaa6; | layout(stream = 6) out ooutb { vec4 a; } ouuaa6; | ||||||
| 
 | 
 | ||||||
| layout(stream = 6) out ooutb { | layout(stream = 6) out ooutb2 { | ||||||
|     layout(stream = 6) vec4 a; |     layout(stream = 6) vec4 a; | ||||||
| } ouua6; | } ouua6; | ||||||
| 
 | 
 | ||||||
| layout(stream = 7) out ooutb { | layout(stream = 7) out ooutb3 { | ||||||
|     layout(stream = 6) vec4 a;  // ERROR |     layout(stream = 6) vec4 a;  // ERROR | ||||||
| } ouua7; | } ouua7; | ||||||
| 
 | 
 | ||||||
| @ -74,7 +74,7 @@ layout(triangle_strip) uniform; // ERROR | |||||||
| layout(triangle_strip) out vec4 badv4;  // ERROR, not on a variable | layout(triangle_strip) out vec4 badv4;  // ERROR, not on a variable | ||||||
| layout(triangle_strip) in vec4 bad2v4;  // ERROR, not on a variable or input | layout(triangle_strip) in vec4 bad2v4;  // ERROR, not on a variable or input | ||||||
| layout(invocations = 3) out outbn { int a; }; // ERROR, not on a block | layout(invocations = 3) out outbn { int a; }; // ERROR, not on a block | ||||||
| out outbn { | out outbn2 { | ||||||
|     layout(invocations = 3)  int a; // ERROR, not on a block member |     layout(invocations = 3)  int a; // ERROR, not on a block member | ||||||
|     layout(max_vertices = 3) int b; // ERROR, not on a block member |     layout(max_vertices = 3) int b; // ERROR, not on a block member | ||||||
|     layout(triangle_strip)   int c; // ERROR, not on a block member |     layout(triangle_strip)   int c; // ERROR, not on a block member | ||||||
| @ -90,3 +90,15 @@ layout(invocations = 4, max_vertices = 127) out; | |||||||
| in inbn { | in inbn { | ||||||
|     layout(stream = 2) int a;     // ERROR, stream on input |     layout(stream = 2) int a;     // ERROR, stream on input | ||||||
| } inbi; | } inbi; | ||||||
|  | 
 | ||||||
|  | in sameName { | ||||||
|  |     int a15; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | out sameName { | ||||||
|  |     float f15; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | uniform sameName { | ||||||
|  |     bool b15; | ||||||
|  | }; | ||||||
|  | |||||||
| @ -80,3 +80,27 @@ out S s2; | |||||||
| invariant s2; | invariant s2; | ||||||
| invariant out S s3; | invariant out S s3; | ||||||
| flat out int; | flat out int; | ||||||
|  | 
 | ||||||
|  | uniform ub2 { | ||||||
|  |     float f; | ||||||
|  | } a; | ||||||
|  | 
 | ||||||
|  | uniform ub2 {  // ERROR redeclaration of block name (same instance name) | ||||||
|  |     float g; | ||||||
|  | } a; | ||||||
|  | 
 | ||||||
|  | uniform ub2 {  // ERROR redeclaration of block name (different instance name) | ||||||
|  |     float f; | ||||||
|  | } c; | ||||||
|  | 
 | ||||||
|  | uniform ub2 {  // ERROR redeclaration of block name (no instance name) | ||||||
|  |     float f123; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | uniform ub3 { | ||||||
|  |     bool b23; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | uniform ub3 {  // ERROR redeclaration of block name (no instance name in first or declared) | ||||||
|  |     bool b234; | ||||||
|  | }; | ||||||
|  | |||||||
| @ -18,11 +18,15 @@ float b(int a);      // ERROR: redefinition | |||||||
| 
 | 
 | ||||||
| float f;             // ERROR: redefinition | float f;             // ERROR: redefinition | ||||||
| float tan;           // ERROR: redefines built-in function | float tan;           // ERROR: redefines built-in function | ||||||
| float sin(float x);  // ERROR: can't overload built-in functions | float sin(float x);  // ERROR: can't redefine built-in functions | ||||||
| float cos(float x)   // ERROR: can't overload built-in functions | float cos(float x)   // ERROR: can't redefine built-in functions | ||||||
| { | { | ||||||
| 	return 1.0; | 	return 1.0; | ||||||
| } | } | ||||||
|  | bool radians(bool x) // ERROR: can't overload built-in functions | ||||||
|  | { | ||||||
|  |     return true; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| invariant gl_Position; | invariant gl_Position; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -18,11 +18,15 @@ float b(int a);      // ERROR: redefinition | |||||||
| 
 | 
 | ||||||
| float f;             // ERROR: redefinition | float f;             // ERROR: redefinition | ||||||
| float tan;           // okay, hides built-in function | float tan;           // okay, hides built-in function | ||||||
| float sin(float x);  // okay, can overload built-in functions | float sin(float x);  // okay, can redefine built-in functions | ||||||
| float cos(float x)   // okay, can overload built-in functions | float cos(float x)   // okay, can redefine built-in functions | ||||||
| { | { | ||||||
| 	return 1.0; | 	return 1.0; | ||||||
| } | } | ||||||
|  | bool radians(bool x) // okay, can overload built-in functions | ||||||
|  | { | ||||||
|  |     return true; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| invariant gl_Position; | invariant gl_Position; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,11 +1,12 @@ | |||||||
| ERROR: 0:5: 'a' : redefinition  | ERROR: 0:5: 'a' : redefinition  | ||||||
| ERROR: 0:17: 'b' : illegal redeclaration  | ERROR: 0:17: 'b' : redeclaration of existing name  | ||||||
| ERROR: 0:19: 'f' : redefinition  | ERROR: 0:19: 'f' : redefinition  | ||||||
| ERROR: 0:20: 'tan' : redefinition  | ERROR: 0:21: 'redefinition of built-in function' : not supported with this profile: es | ||||||
| ERROR: 0:31: 'local function declaration' : not supported with this profile: es | ERROR: 0:22: 'redefinition of built-in function' : not supported with this profile: es | ||||||
| ERROR: 0:50: 'z' : undeclared identifier  | ERROR: 0:35: 'local function declaration' : not supported with this profile: es | ||||||
| ERROR: 0:50: 'z' : redefinition  | ERROR: 0:54: 'z' : undeclared identifier  | ||||||
| ERROR: 7 compilation errors.  No code generated. | ERROR: 0:54: 'z' : redefinition  | ||||||
|  | ERROR: 8 compilation errors.  No code generated. | ||||||
| 
 | 
 | ||||||
| ERROR: node is still EOpNull! | ERROR: node is still EOpNull! | ||||||
| 0:3  Function Definition: f(i1;i1;i1; (highp int) | 0:3  Function Definition: f(i1;i1;i1; (highp int) | ||||||
| @ -32,73 +33,81 @@ ERROR: node is still EOpNull! | |||||||
| 0:24      Branch: Return with expression | 0:24      Branch: Return with expression | ||||||
| 0:24        Constant: | 0:24        Constant: | ||||||
| 0:24          1.000000 | 0:24          1.000000 | ||||||
| 0:29  Function Definition: main( (void) | 0:26  Function Definition: radians(b1; (bool) | ||||||
| 0:29    Function Parameters:  | 0:26    Function Parameters:  | ||||||
|  | 0:26      'x' (in bool) | ||||||
|  | 0:28    Sequence | ||||||
|  | 0:28      Branch: Return with expression | ||||||
|  | 0:28        Constant: | ||||||
|  | 0:28          true (const bool) | ||||||
|  | 0:33  Function Definition: main( (void) | ||||||
|  | 0:33    Function Parameters:  | ||||||
| 0:?     Sequence | 0:?     Sequence | ||||||
| 0:32      Function Call: g( (highp int) | 0:36      Function Call: g( (highp int) | ||||||
| 0:35      'sin' (highp float) | 0:39      'sin' (highp float) | ||||||
| 0:37      Function Call: f(i1;i1;i1; (highp int) | 0:41      Function Call: f(i1;i1;i1; (highp int) | ||||||
| 0:37        Constant: | 0:41        Constant: | ||||||
| 0:37          1 (const int) | 0:41          1 (const int) | ||||||
| 0:37        Constant: | 0:41        Constant: | ||||||
| 0:37          2 (const int) | 0:41          2 (const int) | ||||||
| 0:37        Constant: | 0:41        Constant: | ||||||
| 0:37          3 (const int) | 0:41          3 (const int) | ||||||
| 0:40      move second child to first child (highp float) | 0:44      move second child to first child (highp float) | ||||||
| 0:40        'f' (highp float) | 0:44        'f' (highp float) | ||||||
| 0:40        Constant: |  | ||||||
| 0:40          3.000000 |  | ||||||
| 0:42      move second child to first child (highp 4-component vector of float) |  | ||||||
| 0:42        'gl_Position' (invariant gl_Position highp 4-component vector of float) |  | ||||||
| 0:42        Construct vec4 (highp 4-component vector of float) |  | ||||||
| 0:42          'f' (highp float) |  | ||||||
| 0:44      Sequence |  | ||||||
| 0:44        Sequence |  | ||||||
| 0:44          move second child to first child (highp int) |  | ||||||
| 0:44            'f' (highp int) |  | ||||||
| 0:44        Constant: | 0:44        Constant: | ||||||
| 0:44              0 (const int) | 0:44          3.000000 | ||||||
| 0:44        Loop with condition tested first | 0:46      move second child to first child (highp 4-component vector of float) | ||||||
| 0:44          Loop Condition | 0:46        'gl_Position' (invariant gl_Position highp 4-component vector of float) | ||||||
| 0:44          Compare Less Than (bool) | 0:46        Construct vec4 (highp 4-component vector of float) | ||||||
| 0:44            'f' (highp int) | 0:46          'f' (highp float) | ||||||
| 0:44            Constant: | 0:48      Sequence | ||||||
| 0:44              10 (const int) | 0:48        Sequence | ||||||
| 0:44          Loop Body | 0:48          move second child to first child (highp int) | ||||||
| 0:45          Pre-Increment (highp int) | 0:48            'f' (highp int) | ||||||
| 0:45            'f' (highp int) | 0:48            Constant: | ||||||
| 0:44          Loop Terminal Expression | 0:48              0 (const int) | ||||||
| 0:44          Pre-Increment (highp int) | 0:48        Loop with condition tested first | ||||||
| 0:44            'f' (highp int) | 0:48          Loop Condition | ||||||
| 0:47      Sequence | 0:48          Compare Less Than (bool) | ||||||
| 0:47        move second child to first child (highp int) | 0:48            'f' (highp int) | ||||||
| 0:47          'x' (highp int) | 0:48            Constant: | ||||||
| 0:47          Constant: | 0:48              10 (const int) | ||||||
| 0:47            1 (const int) | 0:48          Loop Body | ||||||
| 0:49      Sequence | 0:49          Pre-Increment (highp int) | ||||||
| 0:49        Sequence | 0:49            'f' (highp int) | ||||||
| 0:49          move second child to first child (highp float) | 0:48          Loop Terminal Expression | ||||||
| 0:49            'x' (highp float) | 0:48          Pre-Increment (highp int) | ||||||
| 0:49            Constant: | 0:48            'f' (highp int) | ||||||
| 0:49              2.000000 | 0:51      Sequence | ||||||
| 0:49          move second child to first child (highp float) | 0:51        move second child to first child (highp int) | ||||||
| 0:49            'y' (highp float) | 0:51          'x' (highp int) | ||||||
| 0:49            'x' (highp float) | 0:51          Constant: | ||||||
|  | 0:51            1 (const int) | ||||||
| 0:53      Sequence | 0:53      Sequence | ||||||
| 0:53        Sequence | 0:53        Sequence | ||||||
| 0:53          move second child to first child (highp int) | 0:53          move second child to first child (highp float) | ||||||
| 0:53            'x' (highp int) | 0:53            'x' (highp float) | ||||||
| 0:53            'x' (highp int) | 0:53            Constant: | ||||||
| 0:61      Sequence | 0:53              2.000000 | ||||||
| 0:61        Sequence | 0:53          move second child to first child (highp float) | ||||||
| 0:61          move second child to first child (structure{x}) | 0:53            'y' (highp float) | ||||||
| 0:61            'S' (structure{x}) | 0:53            'x' (highp float) | ||||||
| 0:61            Constant: | 0:57      Sequence | ||||||
| 0:61              0 (const int) | 0:57        Sequence | ||||||
| 0:62        x: direct index for structure (highp int) | 0:57          move second child to first child (highp int) | ||||||
| 0:62          'S' (structure{x}) | 0:57            'x' (highp int) | ||||||
| 0:62          Constant: | 0:57            'x' (highp int) | ||||||
| 0:62            0 (const int) | 0:65      Sequence | ||||||
|  | 0:65        Sequence | ||||||
|  | 0:65          move second child to first child (structure{x}) | ||||||
|  | 0:65            'S' (structure{x}) | ||||||
|  | 0:65            Constant: | ||||||
|  | 0:65              0 (const int) | ||||||
|  | 0:66        x: direct index for structure (highp int) | ||||||
|  | 0:66          'S' (structure{x}) | ||||||
|  | 0:66          Constant: | ||||||
|  | 0:66            0 (const int) | ||||||
| 0:?   Linker Objects | 0:?   Linker Objects | ||||||
| 0:?     'b' (bool) | 0:?     'b' (bool) | ||||||
|  | 0:?     'tan' (highp float) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -135,4 +135,7 @@ ERROR: node is still EOpNull! | |||||||
| 0:?     '__anon__1' (layout(stream=3 ) out block{a}) | 0:?     '__anon__1' (layout(stream=3 ) out block{a}) | ||||||
| 0:?     'outbi' (layout(stream=3 ) out block{a,b,c}) | 0:?     'outbi' (layout(stream=3 ) out block{a,b,c}) | ||||||
| 0:?     'inbi' (in block{a}) | 0:?     'inbi' (in block{a}) | ||||||
|  | 0:?     '__anon__2' (in block{a15}) | ||||||
|  | 0:?     '__anon__3' (layout(stream=3 ) out block{f15}) | ||||||
|  | 0:?     '__anon__4' (layout(column_major shared ) uniform block{b15}) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -18,9 +18,12 @@ ERROR: 0:63: '' : array size required | |||||||
| ERROR: 0:65: '' : array size required  | ERROR: 0:65: '' : array size required  | ||||||
| ERROR: 0:64: '' : array size required  | ERROR: 0:64: '' : array size required  | ||||||
| ERROR: 0:67: '' : array size required  | ERROR: 0:67: '' : array size required  | ||||||
| ERROR: 0:78: 'invariant' : can only apply to an output | ERROR: 0:78: 'invariant' : can only apply to an output: invIn | ||||||
|  invIn | ERROR: 0:88: 'ub2' : Cannot reuse block name within the same interface: uniform | ||||||
| ERROR: 21 compilation errors.  No code generated. | ERROR: 0:92: 'ub2' : Cannot reuse block name within the same interface: uniform | ||||||
|  | ERROR: 0:96: 'ub2' : Cannot reuse block name within the same interface: uniform | ||||||
|  | ERROR: 0:104: 'ub3' : Cannot reuse block name within the same interface: uniform | ||||||
|  | ERROR: 25 compilation errors.  No code generated. | ||||||
| 
 | 
 | ||||||
| ERROR: node is still EOpNull! | ERROR: node is still EOpNull! | ||||||
| 0:27  Function Definition: main( (void) | 0:27  Function Definition: main( (void) | ||||||
| @ -167,6 +170,8 @@ ERROR: node is still EOpNull! | |||||||
| 0:?     'invIn' (in highp 4-component vector of float) | 0:?     'invIn' (in highp 4-component vector of float) | ||||||
| 0:?     's2' (smooth out structure{c,f}) | 0:?     's2' (smooth out structure{c,f}) | ||||||
| 0:?     's3' (invariant smooth out structure{c,f}) | 0:?     's3' (invariant smooth out structure{c,f}) | ||||||
|  | 0:?     'a' (layout(column_major shared ) uniform block{f}) | ||||||
|  | 0:?     '__anon__0' (layout(column_major shared ) uniform block{b23}) | ||||||
| 0:?     'gl_VertexID' (gl_VertexId highp int) | 0:?     'gl_VertexID' (gl_VertexId highp int) | ||||||
| 0:?     'gl_InstanceID' (gl_InstanceId highp int) | 0:?     'gl_InstanceID' (gl_InstanceId highp int) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,13 +1,18 @@ | |||||||
| ERROR: 0:5: 'a' : redefinition  | ERROR: 0:5: 'a' : redefinition  | ||||||
| ERROR: 0:17: 'b' : illegal redeclaration  | ERROR: 0:17: 'b' : redeclaration of existing name  | ||||||
| ERROR: 0:19: 'f' : redefinition  | ERROR: 0:19: 'f' : redefinition  | ||||||
| ERROR: 0:20: 'tan' : redefinition  | ERROR: 0:20: 'tan' : redefinition  | ||||||
| ERROR: 0:21: 'redeclaration of built-in function' : no longer supported in es profile; removed in version 300 | ERROR: 0:21: 'redefinition of built-in function' : not supported with this profile: es | ||||||
| ERROR: 0:22: 'redeclaration of built-in function' : no longer supported in es profile; removed in version 300 | ERROR: 0:21: 'sin' : redeclaration of existing name  | ||||||
| ERROR: 0:31: 'local function declaration' : not supported with this profile: es | ERROR: 0:22: 'redefinition of built-in function' : not supported with this profile: es | ||||||
| ERROR: 0:50: 'z' : undeclared identifier  | ERROR: 0:22: 'cos' : redeclaration of existing name  | ||||||
| ERROR: 0:50: 'z' : redefinition  | ERROR: 0:26: 'radians' : redeclaration of existing name  | ||||||
| ERROR: 9 compilation errors.  No code generated. | ERROR: 0:26: 'radians' : can't find function  | ||||||
|  | ERROR: 0:28: 'return' : void function cannot return a value  | ||||||
|  | ERROR: 0:35: 'local function declaration' : not supported with this profile: es | ||||||
|  | ERROR: 0:54: 'z' : undeclared identifier  | ||||||
|  | ERROR: 0:54: 'z' : redefinition  | ||||||
|  | ERROR: 14 compilation errors.  No code generated. | ||||||
| 
 | 
 | ||||||
| ERROR: node is still EOpNull! | ERROR: node is still EOpNull! | ||||||
| 0:3  Function Definition: f(i1;i1;i1; (highp int) | 0:3  Function Definition: f(i1;i1;i1; (highp int) | ||||||
| @ -34,73 +39,80 @@ ERROR: node is still EOpNull! | |||||||
| 0:24      Branch: Return with expression | 0:24      Branch: Return with expression | ||||||
| 0:24        Constant: | 0:24        Constant: | ||||||
| 0:24          1.000000 | 0:24          1.000000 | ||||||
| 0:29  Function Definition: main( (void) | 0:26  Function Definition: radians(b1; (bool) | ||||||
| 0:29    Function Parameters:  | 0:26    Function Parameters:  | ||||||
|  | 0:26      'x' (in bool) | ||||||
|  | 0:28    Sequence | ||||||
|  | 0:28      Branch: Return with expression | ||||||
|  | 0:28        Constant: | ||||||
|  | 0:28          true (const bool) | ||||||
|  | 0:33  Function Definition: main( (void) | ||||||
|  | 0:33    Function Parameters:  | ||||||
| 0:?     Sequence | 0:?     Sequence | ||||||
| 0:32      Function Call: g( (highp int) | 0:36      Function Call: g( (highp int) | ||||||
| 0:35      'sin' (highp float) | 0:39      'sin' (highp float) | ||||||
| 0:37      Function Call: f(i1;i1;i1; (highp int) | 0:41      Function Call: f(i1;i1;i1; (highp int) | ||||||
| 0:37        Constant: | 0:41        Constant: | ||||||
| 0:37          1 (const int) | 0:41          1 (const int) | ||||||
| 0:37        Constant: | 0:41        Constant: | ||||||
| 0:37          2 (const int) | 0:41          2 (const int) | ||||||
| 0:37        Constant: | 0:41        Constant: | ||||||
| 0:37          3 (const int) | 0:41          3 (const int) | ||||||
| 0:40      move second child to first child (highp float) | 0:44      move second child to first child (highp float) | ||||||
| 0:40        'f' (highp float) | 0:44        'f' (highp float) | ||||||
| 0:40        Constant: |  | ||||||
| 0:40          3.000000 |  | ||||||
| 0:42      move second child to first child (highp 4-component vector of float) |  | ||||||
| 0:42        'gl_Position' (invariant gl_Position highp 4-component vector of float) |  | ||||||
| 0:42        Construct vec4 (highp 4-component vector of float) |  | ||||||
| 0:42          'f' (highp float) |  | ||||||
| 0:44      Sequence |  | ||||||
| 0:44        Sequence |  | ||||||
| 0:44          move second child to first child (highp int) |  | ||||||
| 0:44            'f' (highp int) |  | ||||||
| 0:44        Constant: | 0:44        Constant: | ||||||
| 0:44              0 (const int) | 0:44          3.000000 | ||||||
| 0:44        Loop with condition tested first | 0:46      move second child to first child (highp 4-component vector of float) | ||||||
| 0:44          Loop Condition | 0:46        'gl_Position' (invariant gl_Position highp 4-component vector of float) | ||||||
| 0:44          Compare Less Than (bool) | 0:46        Construct vec4 (highp 4-component vector of float) | ||||||
| 0:44            'f' (highp int) | 0:46          'f' (highp float) | ||||||
| 0:44            Constant: | 0:48      Sequence | ||||||
| 0:44              10 (const int) | 0:48        Sequence | ||||||
| 0:44          Loop Body | 0:48          move second child to first child (highp int) | ||||||
| 0:45          Pre-Increment (highp int) | 0:48            'f' (highp int) | ||||||
| 0:45            'f' (highp int) | 0:48            Constant: | ||||||
| 0:44          Loop Terminal Expression | 0:48              0 (const int) | ||||||
| 0:44          Pre-Increment (highp int) | 0:48        Loop with condition tested first | ||||||
| 0:44            'f' (highp int) | 0:48          Loop Condition | ||||||
| 0:47      Sequence | 0:48          Compare Less Than (bool) | ||||||
| 0:47        move second child to first child (highp int) | 0:48            'f' (highp int) | ||||||
| 0:47          'x' (highp int) | 0:48            Constant: | ||||||
| 0:47          Constant: | 0:48              10 (const int) | ||||||
| 0:47            1 (const int) | 0:48          Loop Body | ||||||
| 0:49      Sequence | 0:49          Pre-Increment (highp int) | ||||||
| 0:49        Sequence | 0:49            'f' (highp int) | ||||||
| 0:49          move second child to first child (highp float) | 0:48          Loop Terminal Expression | ||||||
| 0:49            'x' (highp float) | 0:48          Pre-Increment (highp int) | ||||||
| 0:49            Constant: | 0:48            'f' (highp int) | ||||||
| 0:49              2.000000 | 0:51      Sequence | ||||||
| 0:49          move second child to first child (highp float) | 0:51        move second child to first child (highp int) | ||||||
| 0:49            'y' (highp float) | 0:51          'x' (highp int) | ||||||
| 0:49            'x' (highp float) | 0:51          Constant: | ||||||
|  | 0:51            1 (const int) | ||||||
| 0:53      Sequence | 0:53      Sequence | ||||||
| 0:53        Sequence | 0:53        Sequence | ||||||
| 0:53          move second child to first child (highp int) | 0:53          move second child to first child (highp float) | ||||||
| 0:53            'x' (highp int) | 0:53            'x' (highp float) | ||||||
| 0:53            'x' (highp int) | 0:53            Constant: | ||||||
| 0:61      Sequence | 0:53              2.000000 | ||||||
| 0:61        Sequence | 0:53          move second child to first child (highp float) | ||||||
| 0:61          move second child to first child (structure{x}) | 0:53            'y' (highp float) | ||||||
| 0:61            'S' (structure{x}) | 0:53            'x' (highp float) | ||||||
| 0:61            Constant: | 0:57      Sequence | ||||||
| 0:61              0 (const int) | 0:57        Sequence | ||||||
| 0:62        x: direct index for structure (highp int) | 0:57          move second child to first child (highp int) | ||||||
| 0:62          'S' (structure{x}) | 0:57            'x' (highp int) | ||||||
| 0:62          Constant: | 0:57            'x' (highp int) | ||||||
| 0:62            0 (const int) | 0:65      Sequence | ||||||
|  | 0:65        Sequence | ||||||
|  | 0:65          move second child to first child (structure{x}) | ||||||
|  | 0:65            'S' (structure{x}) | ||||||
|  | 0:65            Constant: | ||||||
|  | 0:65              0 (const int) | ||||||
|  | 0:66        x: direct index for structure (highp int) | ||||||
|  | 0:66          'S' (structure{x}) | ||||||
|  | 0:66          Constant: | ||||||
|  | 0:66            0 (const int) | ||||||
| 0:?   Linker Objects | 0:?   Linker Objects | ||||||
| 0:?     'b' (bool) | 0:?     'b' (bool) | ||||||
| 0:?     'gl_VertexID' (gl_VertexId highp int) | 0:?     'gl_VertexID' (gl_VertexId highp int) | ||||||
|  | |||||||
| @ -1,9 +1,9 @@ | |||||||
| Warning, version 430 is not yet complete; some version-specific features are present, but many are missing. | Warning, version 430 is not yet complete; some version-specific features are present, but many are missing. | ||||||
| ERROR: 0:5: 'a' : redefinition  | ERROR: 0:5: 'a' : redefinition  | ||||||
| ERROR: 0:17: 'b' : illegal redeclaration  | ERROR: 0:17: 'b' : redeclaration of existing name  | ||||||
| ERROR: 0:19: 'f' : redefinition  | ERROR: 0:19: 'f' : redefinition  | ||||||
| ERROR: 0:50: 'z' : undeclared identifier  | ERROR: 0:54: 'z' : undeclared identifier  | ||||||
| ERROR: 0:50: 'z' : redefinition  | ERROR: 0:54: 'z' : redefinition  | ||||||
| ERROR: 5 compilation errors.  No code generated. | ERROR: 5 compilation errors.  No code generated. | ||||||
| 
 | 
 | ||||||
| ERROR: node is still EOpNull! | ERROR: node is still EOpNull! | ||||||
| @ -31,76 +31,83 @@ ERROR: node is still EOpNull! | |||||||
| 0:24      Branch: Return with expression | 0:24      Branch: Return with expression | ||||||
| 0:24        Constant: | 0:24        Constant: | ||||||
| 0:24          1.000000 | 0:24          1.000000 | ||||||
| 0:29  Function Definition: main( (void) | 0:26  Function Definition: radians(b1; (bool) | ||||||
| 0:29    Function Parameters:  | 0:26    Function Parameters:  | ||||||
|  | 0:26      'x' (in bool) | ||||||
|  | 0:28    Sequence | ||||||
|  | 0:28      Branch: Return with expression | ||||||
|  | 0:28        Constant: | ||||||
|  | 0:28          true (const bool) | ||||||
|  | 0:33  Function Definition: main( (void) | ||||||
|  | 0:33    Function Parameters:  | ||||||
| 0:?     Sequence | 0:?     Sequence | ||||||
| 0:32      Function Call: g( (int) | 0:36      Function Call: g( (int) | ||||||
| 0:35      'sin' (float) | 0:39      'sin' (float) | ||||||
| 0:37      Function Call: f(i1;i1;i1; (int) | 0:41      Function Call: f(i1;i1;i1; (int) | ||||||
| 0:37        Constant: | 0:41        Constant: | ||||||
| 0:37          1 (const int) | 0:41          1 (const int) | ||||||
| 0:37        Constant: | 0:41        Constant: | ||||||
| 0:37          2 (const int) | 0:41          2 (const int) | ||||||
| 0:37        Constant: | 0:41        Constant: | ||||||
| 0:37          3 (const int) | 0:41          3 (const int) | ||||||
| 0:40      move second child to first child (float) | 0:44      move second child to first child (float) | ||||||
| 0:40        'f' (float) | 0:44        'f' (float) | ||||||
| 0:40        Constant: |  | ||||||
| 0:40          3.000000 |  | ||||||
| 0:42      move second child to first child (4-component vector of float) |  | ||||||
| 0:42        gl_Position: direct index for structure (invariant gl_Position 4-component vector of float) |  | ||||||
| 0:42          '__anon__0' (out block{gl_Position,gl_PointSize,gl_ClipDistance,gl_ClipVertex,gl_FrontColor,gl_BackColor,gl_FrontSecondaryColor,gl_BackSecondaryColor,gl_TexCoord,gl_FogFragCoord}) |  | ||||||
| 0:42          Constant: |  | ||||||
| 0:42            0 (const uint) |  | ||||||
| 0:42        Construct vec4 (4-component vector of float) |  | ||||||
| 0:42          'f' (float) |  | ||||||
| 0:44      Sequence |  | ||||||
| 0:44        Sequence |  | ||||||
| 0:44          move second child to first child (int) |  | ||||||
| 0:44            'f' (int) |  | ||||||
| 0:44        Constant: | 0:44        Constant: | ||||||
| 0:44              0 (const int) | 0:44          3.000000 | ||||||
| 0:44        Loop with condition tested first | 0:46      move second child to first child (4-component vector of float) | ||||||
| 0:44          Loop Condition | 0:46        gl_Position: direct index for structure (invariant gl_Position 4-component vector of float) | ||||||
| 0:44          Compare Less Than (bool) | 0:46          '__anon__0' (out block{gl_Position,gl_PointSize,gl_ClipDistance,gl_ClipVertex,gl_FrontColor,gl_BackColor,gl_FrontSecondaryColor,gl_BackSecondaryColor,gl_TexCoord,gl_FogFragCoord}) | ||||||
| 0:44            'f' (int) | 0:46          Constant: | ||||||
| 0:44            Constant: | 0:46            0 (const uint) | ||||||
| 0:44              10 (const int) | 0:46        Construct vec4 (4-component vector of float) | ||||||
| 0:44          Loop Body | 0:46          'f' (float) | ||||||
| 0:45          Pre-Increment (int) | 0:48      Sequence | ||||||
| 0:45            'f' (int) | 0:48        Sequence | ||||||
| 0:44          Loop Terminal Expression | 0:48          move second child to first child (int) | ||||||
| 0:44          Pre-Increment (int) | 0:48            'f' (int) | ||||||
| 0:44            'f' (int) | 0:48            Constant: | ||||||
| 0:47      Sequence | 0:48              0 (const int) | ||||||
| 0:47        move second child to first child (int) | 0:48        Loop with condition tested first | ||||||
| 0:47          'x' (int) | 0:48          Loop Condition | ||||||
| 0:47          Constant: | 0:48          Compare Less Than (bool) | ||||||
| 0:47            1 (const int) | 0:48            'f' (int) | ||||||
| 0:49      Sequence | 0:48            Constant: | ||||||
| 0:49        Sequence | 0:48              10 (const int) | ||||||
| 0:49          move second child to first child (float) | 0:48          Loop Body | ||||||
| 0:49            'x' (float) | 0:49          Pre-Increment (int) | ||||||
| 0:49            Constant: | 0:49            'f' (int) | ||||||
| 0:49              2.000000 | 0:48          Loop Terminal Expression | ||||||
| 0:49          move second child to first child (float) | 0:48          Pre-Increment (int) | ||||||
| 0:49            'y' (float) | 0:48            'f' (int) | ||||||
| 0:49            'x' (float) | 0:51      Sequence | ||||||
|  | 0:51        move second child to first child (int) | ||||||
|  | 0:51          'x' (int) | ||||||
|  | 0:51          Constant: | ||||||
|  | 0:51            1 (const int) | ||||||
| 0:53      Sequence | 0:53      Sequence | ||||||
| 0:53        Sequence | 0:53        Sequence | ||||||
| 0:53          move second child to first child (int) | 0:53          move second child to first child (float) | ||||||
| 0:53            'x' (int) | 0:53            'x' (float) | ||||||
| 0:53            'x' (int) | 0:53            Constant: | ||||||
| 0:61      Sequence | 0:53              2.000000 | ||||||
| 0:61        Sequence | 0:53          move second child to first child (float) | ||||||
| 0:61          move second child to first child (structure{x}) | 0:53            'y' (float) | ||||||
| 0:61            'S' (structure{x}) | 0:53            'x' (float) | ||||||
| 0:61            Constant: | 0:57      Sequence | ||||||
| 0:61              0 (const int) | 0:57        Sequence | ||||||
| 0:62        x: direct index for structure (int) | 0:57          move second child to first child (int) | ||||||
| 0:62          'S' (structure{x}) | 0:57            'x' (int) | ||||||
| 0:62          Constant: | 0:57            'x' (int) | ||||||
| 0:62            0 (const int) | 0:65      Sequence | ||||||
|  | 0:65        Sequence | ||||||
|  | 0:65          move second child to first child (structure{x}) | ||||||
|  | 0:65            'S' (structure{x}) | ||||||
|  | 0:65            Constant: | ||||||
|  | 0:65              0 (const int) | ||||||
|  | 0:66        x: direct index for structure (int) | ||||||
|  | 0:66          'S' (structure{x}) | ||||||
|  | 0:66          Constant: | ||||||
|  | 0:66            0 (const int) | ||||||
| 0:?   Linker Objects | 0:?   Linker Objects | ||||||
| 0:?     'b' (bool) | 0:?     'b' (bool) | ||||||
| 0:?     'tan' (float) | 0:?     'tan' (float) | ||||||
|  | |||||||
| @ -3,8 +3,7 @@ ERROR: 0:6: '=' :  cannot convert from 'const uint' to 'int' | |||||||
| ERROR: 0:20: '' : numeric literal too big  | ERROR: 0:20: '' : numeric literal too big  | ||||||
| ERROR: 0:21: '' : hexidecimal literal too big  | ERROR: 0:21: '' : hexidecimal literal too big  | ||||||
| ERROR: 0:37: 'view' : redefinition  | ERROR: 0:37: 'view' : redefinition  | ||||||
| ERROR: 0:63: 'invariant' : can only apply to an output | ERROR: 0:63: 'invariant' : can only apply to an output: Color | ||||||
|  Color |  | ||||||
| ERROR: 0:68: 'lightPosition' : redefinition  | ERROR: 0:68: 'lightPosition' : redefinition  | ||||||
| ERROR: 0:75: 'Atten' : member storage qualifier cannot contradict block storage qualifier  | ERROR: 0:75: 'Atten' : member storage qualifier cannot contradict block storage qualifier  | ||||||
| ERROR: 0:87: 'Color' : redefinition  | ERROR: 0:87: 'Color' : redefinition  | ||||||
|  | |||||||
| @ -733,12 +733,13 @@ TFunction* TParseContext::handleFunctionDeclarator(TSourceLoc loc, TFunction& fu | |||||||
|     //
 |     //
 | ||||||
|     // Redeclarations (full prototype match) are allowed.  But, return types and parameter qualifiers must match.
 |     // Redeclarations (full prototype match) are allowed.  But, return types and parameter qualifiers must match.
 | ||||||
|     //
 |     //
 | ||||||
|     // ES does not allow redeclaring or hiding of built-in functions.
 |     // ES 100 does not allow redefining, but does allow overloading of built-in functions.
 | ||||||
|  |     // ES 300 does not allow redefining or overloading of built-in functions.
 | ||||||
|     //
 |     //
 | ||||||
|     bool builtIn; |     bool builtIn; | ||||||
|     TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn); |     TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn); | ||||||
|     if (symbol && symbol->getAsFunction() && builtIn) |     if (symbol && symbol->getAsFunction() && builtIn) | ||||||
|         requireNotRemoved(loc, EEsProfile, 300, "redeclaration of built-in function"); |         requireProfile(loc, ~EEsProfile, "redefinition of built-in function"); | ||||||
|     const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0; |     const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0; | ||||||
|     if (prevDec) { |     if (prevDec) { | ||||||
|         if (prevDec->getType() != function.getType()) { |         if (prevDec->getType() != function.getType()) { | ||||||
| @ -752,7 +753,7 @@ TFunction* TParseContext::handleFunctionDeclarator(TSourceLoc loc, TFunction& fu | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     if (! symbolTable.insert(function)) |     if (! symbolTable.insert(function)) | ||||||
|         error(loc, "illegal redeclaration", function.getName().c_str(), ""); |         error(loc, "redeclaration of existing name", function.getName().c_str(), ""); | ||||||
| 
 | 
 | ||||||
|     //
 |     //
 | ||||||
|     // If this is a redeclaration, it could also be a definition,
 |     // If this is a redeclaration, it could also be a definition,
 | ||||||
| @ -775,7 +776,7 @@ TIntermAggregate* TParseContext::handleFunctionPrototype(TSourceLoc loc, TFuncti | |||||||
|     TFunction* prevDec = symbol ? symbol->getAsFunction() : 0; |     TFunction* prevDec = symbol ? symbol->getAsFunction() : 0; | ||||||
| 
 | 
 | ||||||
|     if (! prevDec) |     if (! prevDec) | ||||||
|         error(loc, "can't find function name", function.getName().c_str(), ""); |         error(loc, "can't find function", function.getName().c_str(), ""); | ||||||
| 
 | 
 | ||||||
|     //
 |     //
 | ||||||
|     // Note:  'prevDec' could be 'function' if this is the first time we've seen function
 |     // Note:  'prevDec' could be 'function' if this is the first time we've seen function
 | ||||||
| @ -3332,13 +3333,17 @@ void TParseContext::declareBlock(TSourceLoc loc, TTypeList& typeList, const TStr | |||||||
|     // whose type is EbtBlock, but without all the structure; that will come from the type
 |     // whose type is EbtBlock, but without all the structure; that will come from the type
 | ||||||
|     // the instances point to.
 |     // the instances point to.
 | ||||||
|     //
 |     //
 | ||||||
|     TType blockNameType(EbtBlock); |     TType blockNameType(EbtBlock, blockType.getQualifier().storage); | ||||||
|     TVariable* blockNameVar = new TVariable(blockName, blockNameType); |     TVariable* blockNameVar = new TVariable(blockName, blockNameType); | ||||||
|     if (! symbolTable.insert(*blockNameVar)) { |     if (! symbolTable.insert(*blockNameVar)) { | ||||||
|         TSymbol* existingName = symbolTable.find(*blockName); |         TSymbol* existingName = symbolTable.find(*blockName); | ||||||
|         if (existingName->getType().getBasicType() != EbtBlock) { |         if (existingName->getType().getBasicType() == EbtBlock) { | ||||||
|  |             if (existingName->getType().getQualifier().storage == blockType.getQualifier().storage) { | ||||||
|  |                 error(loc, "Cannot reuse block name within the same interface:", blockName->c_str(), blockType.getStorageQualifierString()); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|             error(loc, "block name cannot redefine a non-block name", blockName->c_str(), ""); |             error(loc, "block name cannot redefine a non-block name", blockName->c_str(), ""); | ||||||
| 
 |  | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -3414,7 +3419,7 @@ void TParseContext::invariantCheck(TSourceLoc loc, const TType& type, const TStr | |||||||
|     bool pipeIn = type.getQualifier().isPipeInput(); |     bool pipeIn = type.getQualifier().isPipeInput(); | ||||||
|     if (version >= 300 || profile != EEsProfile && version >= 420) { |     if (version >= 300 || profile != EEsProfile && version >= 420) { | ||||||
|         if (! pipeOut) |         if (! pipeOut) | ||||||
|             error(loc, "can only apply to an output\n", "invariant", identifier.c_str()); |             error(loc, "can only apply to an output:", "invariant", identifier.c_str()); | ||||||
|     } else { |     } else { | ||||||
|         if ((language == EShLangVertex && pipeIn) || (! pipeOut && ! pipeIn)) |         if ((language == EShLangVertex && pipeIn) || (! pipeOut && ! pipeIn)) | ||||||
|             error(loc, "can only apply to an output or an input in a non-vertex stage\n", "invariant", ""); |             error(loc, "can only apply to an output or an input in a non-vertex stage\n", "invariant", ""); | ||||||
|  | |||||||
| @ -168,7 +168,7 @@ void InitializeStageSymbolTable(TBuiltIns& builtIns, int version, EProfile profi | |||||||
|     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]); |     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]); | ||||||
|     InitializeSymbolTable(builtIns.getStageString(language), version, profile, language, infoSink, *symbolTables[language]); |     InitializeSymbolTable(builtIns.getStageString(language), version, profile, language, infoSink, *symbolTables[language]); | ||||||
|     IdentifyBuiltIns(version, profile, language, *symbolTables[language]); |     IdentifyBuiltIns(version, profile, language, *symbolTables[language]); | ||||||
|     if (profile == EEsProfile) |     if (profile == EEsProfile && version >= 300) | ||||||
|         (*symbolTables[language]).setNoBuiltInRedeclarations(); |         (*symbolTables[language]).setNoBuiltInRedeclarations(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -292,9 +292,8 @@ public: | |||||||
|             return isOkay; |             return isOkay; | ||||||
|         } else { |         } else { | ||||||
|             // Check for redefinition errors:
 |             // Check for redefinition errors:
 | ||||||
|             // - STL itself will tell us if there is a direct name collision at this level
 |             // - STL itself will tell us if there is a direct name collision, with name mangling, at this level
 | ||||||
|             // - additionally, check for function/variable name collisions
 |             // - additionally, check for function-redefining-variable name collisions
 | ||||||
|             // - for ES, for overriding or hiding built-in function
 |  | ||||||
|             const TString& insertName = symbol.getMangledName(); |             const TString& insertName = symbol.getMangledName(); | ||||||
|             if (symbol.getAsFunction()) { |             if (symbol.getAsFunction()) { | ||||||
|                 // make sure there isn't a variable of this name
 |                 // make sure there isn't a variable of this name
 | ||||||
| @ -457,11 +456,13 @@ public: | |||||||
|     { |     { | ||||||
|         symbol.setUniqueId(++uniqueId); |         symbol.setUniqueId(++uniqueId); | ||||||
| 
 | 
 | ||||||
|         if (! symbol.getAsFunction()) { |         // make sure there isn't a function of this variable name
 | ||||||
|             // make sure there isn't a function of this name
 |         if (! symbol.getAsFunction() && table[currentLevel()]->hasFunctionName(symbol.getName())) | ||||||
|             if (table[currentLevel()]->hasFunctionName(symbol.getName())) |  | ||||||
|             return false; |             return false; | ||||||
|             if (atGlobalLevel() && currentLevel() > 0 && noBuiltInRedeclarations) { |              | ||||||
|  |         // check for not overloading or redefining a built-in function
 | ||||||
|  |         if (noBuiltInRedeclarations) { | ||||||
|  |             if (atGlobalLevel() && currentLevel() > 0) { | ||||||
|                 if (table[0]->hasFunctionName(symbol.getName())) |                 if (table[0]->hasFunctionName(symbol.getName())) | ||||||
|                     return false; |                     return false; | ||||||
|                 if (currentLevel() > 1 && table[1]->hasFunctionName(symbol.getName())) |                 if (currentLevel() > 1 && table[1]->hasFunctionName(symbol.getName())) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 John Kessenich
						John Kessenich