Misc semantics fixes:
- don't allow pre-array object versions to return a struct containing an array - special case -2147483648 / -1 - include "~" in the full integer functionality checks - handle multiple function parameters having the same name git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@24010 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
parent
09709c1521
commit
67c9f3a720
@ -133,8 +133,17 @@ void foo246()
|
||||
texture2DProj(highExt, v[2]);
|
||||
texture3D(sExt, vec3(f13)); // ERROR
|
||||
texture2DProjLod(sExt, vec3(f13), f13); // ERROR
|
||||
int a;
|
||||
~a; // ERROR
|
||||
a | a; // ERROR
|
||||
a & a; // ERROR
|
||||
}
|
||||
|
||||
#extension GL_OES_EGL_image_external : disable
|
||||
|
||||
int foo203940(int a, float b, float a) // ERROR, a redefined
|
||||
{
|
||||
return a;
|
||||
}
|
||||
|
||||
uniform samplerExternalOES badExt; // syntax ERROR
|
||||
|
@ -39,3 +39,31 @@ void main()
|
||||
gl_FragData[-1] = vec4(1.0); // ERROR
|
||||
gl_FragData[3] = vec4(1.0);
|
||||
}
|
||||
|
||||
struct SA {
|
||||
vec3 v3;
|
||||
vec2 v2[4];
|
||||
};
|
||||
|
||||
struct SB {
|
||||
vec4 v4;
|
||||
SA sa;
|
||||
};
|
||||
|
||||
SB bar9()
|
||||
{
|
||||
SB s;
|
||||
return s; // ERROR
|
||||
}
|
||||
|
||||
void bar10(SB s) // okay
|
||||
{
|
||||
}
|
||||
|
||||
void bar11()
|
||||
{
|
||||
SB s1, s2;
|
||||
s1 = s2; // ERROR
|
||||
bar10(s1);
|
||||
s2 = bar9(); // ERROR
|
||||
}
|
||||
|
@ -53,8 +53,12 @@ ERROR: 0:104: 'gl_FragDepthEXT' : required extension not requested: GL_EXT_frag_
|
||||
ERROR: 0:111: 'gl_FragDepth' : undeclared identifier
|
||||
ERROR: 0:134: 'texture3D' : no matching overloaded function found
|
||||
ERROR: 0:135: 'texture2DProjLod' : no matching overloaded function found
|
||||
ERROR: 0:140: '' : syntax error
|
||||
ERROR: 49 compilation errors. No code generated.
|
||||
ERROR: 0:137: 'bitwise not' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:138: 'bitwise inclusive or' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:139: 'bitwise and' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:144: 'a' : redefinition
|
||||
ERROR: 0:149: '' : syntax error
|
||||
ERROR: 53 compilation errors. No code generated.
|
||||
|
||||
ERROR: node is still EOpNull!
|
||||
0:3 Sequence
|
||||
@ -226,6 +230,21 @@ ERROR: node is still EOpNull!
|
||||
0:134 0.000000
|
||||
0:135 Constant:
|
||||
0:135 0.000000
|
||||
0:137 Bitwise not (mediump int)
|
||||
0:137 'a' (mediump int)
|
||||
0:138 inclusive-or (mediump int)
|
||||
0:138 'a' (mediump int)
|
||||
0:138 'a' (mediump int)
|
||||
0:139 bitwise and (mediump int)
|
||||
0:139 'a' (mediump int)
|
||||
0:139 'a' (mediump int)
|
||||
0:144 Function Definition: foo203940(i1;f1;f1; (mediump int)
|
||||
0:144 Function Parameters:
|
||||
0:144 'a' (in mediump int)
|
||||
0:144 'b' (in mediump float)
|
||||
0:146 Sequence
|
||||
0:146 Branch: Return with expression
|
||||
0:146 'a' (in mediump int)
|
||||
0:? Linker Objects
|
||||
0:? 'a' (3-element array of mediump int)
|
||||
0:? 'uint' (mediump int)
|
||||
|
@ -2,6 +2,7 @@ ERROR: 0:3: 'float' : type requires declaration of default precision qualifier
|
||||
ERROR: 0:3: '' : array size required
|
||||
ERROR: 0:9: 'arrayed type' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:9: 'arrayed type' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:9: 'array in function return type' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:11: 'arrayed constructor' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:21: '[' : array index out of range '2'
|
||||
ERROR: 0:24: 'array assignment' : not supported for this version or the enabled extensions
|
||||
@ -15,7 +16,10 @@ ERROR: 0:31: 'array comparison' : not supported for this version or the enabled
|
||||
ERROR: 0:35: '[' : array index out of range '5'
|
||||
ERROR: 0:38: '[' : array index out of range '1000'
|
||||
ERROR: 0:39: '[' : index out of range '-1'
|
||||
ERROR: 17 compilation errors. No code generated.
|
||||
ERROR: 0:53: 'array in function return type' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:66: 'array assignment' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:68: 'array assignment' : not supported for this version or the enabled extensions
|
||||
ERROR: 21 compilation errors. No code generated.
|
||||
|
||||
ERROR: node is still EOpNull!
|
||||
0:9 Function Definition: foo(f1[5]; (4-element array of mediump float)
|
||||
@ -120,6 +124,25 @@ ERROR: node is still EOpNull!
|
||||
0:40 1.000000
|
||||
0:40 1.000000
|
||||
0:40 1.000000
|
||||
0:53 Function Definition: bar9( (structure{v4,sa})
|
||||
0:53 Function Parameters:
|
||||
0:? Sequence
|
||||
0:56 Branch: Return with expression
|
||||
0:56 's' (structure{v4,sa})
|
||||
0:59 Function Definition: bar10(struct-SB-vf4-struct-SA-vf3-vf2[4]11; (void)
|
||||
0:59 Function Parameters:
|
||||
0:59 's' (in structure{v4,sa})
|
||||
0:63 Function Definition: bar11( (void)
|
||||
0:63 Function Parameters:
|
||||
0:? Sequence
|
||||
0:66 move second child to first child (structure{v4,sa})
|
||||
0:66 's1' (structure{v4,sa})
|
||||
0:66 's2' (structure{v4,sa})
|
||||
0:67 Function Call: bar10(struct-SB-vf4-struct-SA-vf3-vf2[4]11; (void)
|
||||
0:67 's1' (structure{v4,sa})
|
||||
0:68 move second child to first child (structure{v4,sa})
|
||||
0:68 's2' (structure{v4,sa})
|
||||
0:68 Function Call: bar9( (structure{v4,sa})
|
||||
0:? Linker Objects
|
||||
0:? 'gu' (unsized array of mediump float)
|
||||
0:? 'g4' (4-element array of mediump float)
|
||||
|
@ -216,6 +216,18 @@ ERROR: node is still EOpNull!
|
||||
0:113 0.000000
|
||||
0:114 Constant:
|
||||
0:114 0.000000
|
||||
0:116 move second child to first child (int)
|
||||
0:116 'p' (int)
|
||||
0:116 Constant:
|
||||
0:116 2147483647 (const int)
|
||||
0:117 move second child to first child (int)
|
||||
0:117 'p' (int)
|
||||
0:117 Constant:
|
||||
0:117 -2147483648 (const int)
|
||||
0:118 move second child to first child (int)
|
||||
0:118 'p' (int)
|
||||
0:118 Constant:
|
||||
0:118 -2147483647 (const int)
|
||||
0:? Linker Objects
|
||||
0:? 'a' (const int)
|
||||
0:? 1 (const int)
|
||||
|
@ -112,4 +112,8 @@ void foo2()
|
||||
m2[-1][1]; // ERROR
|
||||
m3[1][3]; // ERROR
|
||||
m3[3][1]; // ERROR
|
||||
}
|
||||
int p;
|
||||
p = -2147483647 / -1;
|
||||
p = -2147483648 / -1;
|
||||
p = 2147483647 / -1;
|
||||
}
|
||||
|
@ -165,9 +165,11 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod
|
||||
break;
|
||||
|
||||
case EbtInt:
|
||||
if (rightUnionArray[i] == 0) {
|
||||
if (rightUnionArray[i] == 0)
|
||||
newConstArray[i].setIConst(0x7FFFFFFF);
|
||||
} else
|
||||
else if (rightUnionArray[i].getIConst() == -1 && unionArray[i].getIConst() == 0x80000000)
|
||||
newConstArray[i].setIConst(0x80000000);
|
||||
else
|
||||
newConstArray[i].setIConst(unionArray[i].getIConst() / rightUnionArray[i].getIConst());
|
||||
break;
|
||||
|
||||
|
@ -758,6 +758,8 @@ TFunction* TParseContext::handleFunctionDeclarator(TSourceLoc loc, TFunction& fu
|
||||
}
|
||||
}
|
||||
|
||||
arrayObjectCheck(loc, function.getType(), "array in function return type");
|
||||
|
||||
// All built-in functions are defined, even though they don't have a body.
|
||||
if (symbolTable.atBuiltInLevel())
|
||||
function.setDefined();
|
||||
@ -831,26 +833,22 @@ TIntermAggregate* TParseContext::handleFunctionDefinition(TSourceLoc loc, TFunct
|
||||
TParameter& param = function[i];
|
||||
if (param.name != 0) {
|
||||
TVariable *variable = new TVariable(param.name, *param.type);
|
||||
//
|
||||
|
||||
// Insert the parameters with name in the symbol table.
|
||||
//
|
||||
if (! symbolTable.insert(*variable)) {
|
||||
error(loc, "redefinition", variable->getName().c_str(), "");
|
||||
delete variable;
|
||||
}
|
||||
//
|
||||
// Transfer ownership of name pointer to symbol table.
|
||||
//
|
||||
param.name = 0;
|
||||
} else {
|
||||
// Transfer ownership of name pointer to symbol table.
|
||||
param.name = 0;
|
||||
|
||||
//
|
||||
// Add the parameter to the HIL
|
||||
//
|
||||
paramNodes = intermediate.growAggregate(paramNodes,
|
||||
intermediate.addSymbol(variable->getUniqueId(),
|
||||
variable->getName(),
|
||||
variable->getType(), loc),
|
||||
loc);
|
||||
// Add the parameter to the HIL
|
||||
paramNodes = intermediate.growAggregate(paramNodes,
|
||||
intermediate.addSymbol(variable->getUniqueId(),
|
||||
variable->getName(),
|
||||
variable->getType(), loc),
|
||||
loc);
|
||||
}
|
||||
} else
|
||||
paramNodes = intermediate.growAggregate(paramNodes, intermediate.addSymbol(0, "", *param.type, loc), loc);
|
||||
}
|
||||
|
@ -441,7 +441,8 @@ unary_operator
|
||||
: PLUS { $$.loc = $1.loc; $$.op = EOpNull; }
|
||||
| DASH { $$.loc = $1.loc; $$.op = EOpNegative; }
|
||||
| BANG { $$.loc = $1.loc; $$.op = EOpLogicalNot; }
|
||||
| TILDE { $$.loc = $1.loc; $$.op = EOpBitwiseNot; }
|
||||
| TILDE { $$.loc = $1.loc; $$.op = EOpBitwiseNot;
|
||||
parseContext.fullIntegerCheck($1.loc, "bitwise not"); }
|
||||
;
|
||||
// Grammar Note: No '*' or '&' unary ops. Pointers are not supported.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user