Bug Arrays Nvidia OpenGL GLSL compiler crash on this shader

Nvidia 750
Linux
Driver 465.27 (just updated) (look screenshot)

Easy way to test it: (this is NOT browser bug, this is just simple way to test it, look below to full GLSL code)

  1. launch Chrome in OpenGL mode chrome.exe --use-angle=gl
  2. open this link Shadertoy shader link

result:

crash message:

Linker error (main_screen): 
Fragment info
-------------
(0) : fatal error C9999: Unhandled expr op assign*(183) in CreateDag


Caught a fatal error: Shader linking failed!

Full GLSL shader source, compiling this shader result Nvidia GLSL compler crash:

#version 300 es
#ifdef GL_ES
precision highp float;
#endif
uniform vec2 u_resolution;
uniform float u_time;

out vec4 glFragColor;


#define _uu_time u_time
#define _uu_resolution u_resolution


float _usdSphere(in vec3 _up, in float _ur){
return (length(_up) - _ur);
}
float _usdBox(in vec3 _up, in vec3 _ub){
vec3 _uq = (abs(_up) - _ub);
return (length(max(_uq, 0.0)) + min(max(_uq.x, max(_uq.y, _uq.z)), 0.0));
}
const vec4 _uanim_data[12] = vec4[12](vec4(0.090000004, 0.079999998, 0.090000004, 0.1), vec4(0.090000004, 0.079999998, 0.090000004, 0.1), vec4(20.0, 20.0, 0.0, -10.0), vec4(-15.0, 5.0, 15.0, 40.0), vec4(0.0, -20.0, 0.0, 0.0), vec4(0.0, -40.0, -65.0, -70.0), vec4(-20.0, -10.0, 0.0, 10.0), vec4(20.0, 10.0, 0.0, -10.0), vec4(10.0, 0.0, 0.0, 10.0), vec4(10.0, 0.0, 0.0, 10.0), vec4(1.0, -2.0, -4.0, -3.0), vec4(-1.0, 2.0, 4.0, 3.0));
float _uanim(in int _ubone, in int _us, in int _uph, in int _ut){
(_us *= (((_uph == 0)) ? (1) : (-1)));
float _utimex = fract((_uu_time * 4.0));
int _utx = (_ut - 1);
int _uidx = ((_ubone * 2) + (((_us >= 0)) ? (0) : (1)));
int _uidx1 = _uidx;
if ((_utx < 0))
{
(_uidx1 = ((_ubone * 2) + (((_us >= 0)) ? (1) : (0))));
}
(_utx = (((_utx < 0)) ? (3) : (_utx)));
return mix(_uanim_data[int(clamp(float(_uidx1), 0.0, float(11)))][int(clamp(float(_utx), 0.0, float(3)))], _uanim_data[int(clamp(float(_uidx), 0.0, float(11)))][int(clamp(float(_ut), 0.0, float(3)))], _utimex);
}
float _ubody(in vec3 _up){
float _ud = 4.5;
float _utime = (_uu_time * 4.0);
int _ut = (int(_utime) % 4);
int _uph = (int((_utime / 4.0)) % 2);
float _uhipSwing = ((_uanim(5, 1, _uph, _ut) * 3.1415927) / 180.0);
vec3 _upPelvis = (_up + vec3(0.0, (-0.5 + _uanim(0, 1, _uph, _ut)), 0.0));
(_upPelvis.xy *= mat2(cos(_uhipSwing), sin(_uhipSwing), (-sin(_uhipSwing)), cos(_uhipSwing)));
(_ud = min(_ud, _usdBox((_upPelvis - vec3(0.0, 0.0, 0.025)), vec3(0.085000001, 0.050000001, 0.050000001))));
vec3 _upWaist = (_upPelvis + vec3(0.0, -0.050000001, -0.02));
(_upWaist.xy *= mat2(cos((-_uhipSwing)), sin((-_uhipSwing)), (-sin((-_uhipSwing))), cos((-_uhipSwing))));
(_upWaist.yz *= mat2(1.0, 0.0, -0.0, 1.0));
(_ud = min(_ud, _usdBox((_upWaist - vec3(0.0, 0.039999999, 0.0)), vec3(0.075000003, 0.079999998, 0.029999999))));
vec3 _upChest = (_upWaist + vec3(0.0, -0.14, -0.0099999998));
(_upChest.yz *= mat2(1.0, 0.0, -0.0, 1.0));
(_ud = min(_ud, _usdBox((_upChest - vec3(0.0, 0.039999999, 0.0)), vec3(0.090000004, 0.079999998, 0.050000001))));
vec3 _upNeck = (_upChest + vec3(0.0, -0.15000001, 0.0));
(_upNeck.yz *= mat2(1.0, 0.0, -0.0, 1.0));
(_ud = min(_ud, _usdBox((_upNeck - vec3(0.0, 0.0099999998, 0.0)), vec3(0.02, 0.039999999, 0.02))));
vec3 _upHead = (_upNeck + vec3(0.0, -0.1, 0.0));
(_upHead.yz *= mat2(1.0, 0.0, -0.0, 1.0));
(_ud = min(_ud, _usdBox((_upHead - vec3(0.0, 0.039999999, -0.025)), vec3(0.050000001, 0.079999998, 0.059999999))));
vec3 _upLeg0L = (_upPelvis + vec3(0.059999999, 0.025, 0.0));
(_upLeg0L.xy *= mat2(cos((-_uhipSwing)), sin((-_uhipSwing)), (-sin((-_uhipSwing))), cos((-_uhipSwing))));
(_upLeg0L.yz *= mat2(cos((((180.0 + _uanim(1, 1, _uph, _ut)) * 3.1415927) / 180.0)), sin((((180.0 + _uanim(1, 1, _uph, _ut)) * 3.1415927) / 180.0)), (-sin((((180.0 + _uanim(1, 1, _uph, _ut)) * 3.1415927) / 180.0))), cos((((180.0 + _uanim(1, 1, _uph, _ut)) * 3.1415927) / 180.0))));
(_ud = min(_ud, _usdBox((_upLeg0L - vec3(0.0, 0.1, 0.0)), vec3(0.025, 0.1, 0.025))));
vec3 _upLeg1L = (_upLeg0L + vec3(0.0099999998, -0.18000001, 0.02));
(_upLeg1L.yz *= mat2(cos(((_uanim(2, 1, _uph, _ut) * 3.1415927) / 180.0)), sin(((_uanim(2, 1, _uph, _ut) * 3.1415927) / 180.0)), (-sin(((_uanim(2, 1, _uph, _ut) * 3.1415927) / 180.0))), cos(((_uanim(2, 1, _uph, _ut) * 3.1415927) / 180.0))));
(_ud = min(_ud, _usdBox((_upLeg1L - vec3(0.0, 0.1, 0.0)), vec3(0.025, 0.1, 0.025))));
vec3 _upLeg0R = (_upPelvis + vec3(-0.059999999, 0.025, 0.0));
(_upLeg0R.xy *= mat2(cos((-_uhipSwing)), sin((-_uhipSwing)), (-sin((-_uhipSwing))), cos((-_uhipSwing))));
(_upLeg0R.yz *= mat2(cos((((180.0 + _uanim(1, -1, _uph, _ut)) * 3.1415927) / 180.0)), sin((((180.0 + _uanim(1, -1, _uph, _ut)) * 3.1415927) / 180.0)), (-sin((((180.0 + _uanim(1, -1, _uph, _ut)) * 3.1415927) / 180.0))), cos((((180.0 + _uanim(1, -1, _uph, _ut)) * 3.1415927) / 180.0))));
(_ud = min(_ud, _usdBox((_upLeg0R - vec3(0.0, 0.1, 0.0)), vec3(0.025, 0.1, 0.025))));
vec3 _upLeg1R = (_upLeg0R + vec3(-0.0099999998, -0.18000001, 0.02));
(_upLeg1R.yz *= mat2(cos(((_uanim(2, -1, _uph, _ut) * 3.1415927) / 180.0)), sin(((_uanim(2, -1, _uph, _ut) * 3.1415927) / 180.0)), (-sin(((_uanim(2, -1, _uph, _ut) * 3.1415927) / 180.0))), cos(((_uanim(2, -1, _uph, _ut) * 3.1415927) / 180.0))));
(_ud = min(_ud, _usdBox((_upLeg1R - vec3(0.0, 0.1, 0.0)), vec3(0.025, 0.1, 0.025))));
vec3 _upArm0L = (_upChest + vec3(0.125, -0.1, 0.0));
(_upArm0L.yz *= mat2(cos((((180.0 + _uanim(3, 1, _uph, _ut)) * 3.1415927) / 180.0)), sin((((180.0 + _uanim(3, 1, _uph, _ut)) * 3.1415927) / 180.0)), (-sin((((180.0 + _uanim(3, 1, _uph, _ut)) * 3.1415927) / 180.0))), cos((((180.0 + _uanim(3, 1, _uph, _ut)) * 3.1415927) / 180.0))));
(_ud = min(_ud, _usdBox((_upArm0L - vec3(0.0, 0.079999998, 0.0)), vec3(0.02, 0.079999998, 0.02))));
vec3 _upArm1L = (_upArm0L + vec3(0.0, -0.16, 0.0));
(_upArm1L.yz *= mat2(cos(((_uanim(4, 1, _uph, _ut) * 3.1415927) / 180.0)), sin(((_uanim(4, 1, _uph, _ut) * 3.1415927) / 180.0)), (-sin(((_uanim(4, 1, _uph, _ut) * 3.1415927) / 180.0))), cos(((_uanim(4, 1, _uph, _ut) * 3.1415927) / 180.0))));
(_ud = min(_ud, _usdBox((_upArm1L - vec3(0.0, 0.079999998, 0.0)), vec3(0.02, 0.079999998, 0.02))));
vec3 _upArm0R = (_upChest + vec3(-0.125, -0.1, 0.0));
(_upArm0R.yz *= mat2(cos((((180.0 + _uanim(3, -1, _uph, _ut)) * 3.1415927) / 180.0)), sin((((180.0 + _uanim(3, -1, _uph, _ut)) * 3.1415927) / 180.0)), (-sin((((180.0 + _uanim(3, -1, _uph, _ut)) * 3.1415927) / 180.0))), cos((((180.0 + _uanim(3, -1, _uph, _ut)) * 3.1415927) / 180.0))));
(_ud = min(_ud, _usdBox((_upArm0R - vec3(0.0, 0.079999998, 0.0)), vec3(0.02, 0.079999998, 0.02))));
vec3 _upArm1R = (_upArm0R + vec3(0.0, -0.16, 0.0));
(_upArm1R.yz *= mat2(cos(((_uanim(4, -1, _uph, _ut) * 3.1415927) / 180.0)), sin(((_uanim(4, -1, _uph, _ut) * 3.1415927) / 180.0)), (-sin(((_uanim(4, -1, _uph, _ut) * 3.1415927) / 180.0))), cos(((_uanim(4, -1, _uph, _ut) * 3.1415927) / 180.0))));
(_ud = min(_ud, _usdBox((_upArm1R - vec3(0.0, 0.079999998, 0.0)), vec3(0.02, 0.079999998, 0.02))));
return _ud;
}
vec4 _umap(in vec3 _up){
vec4 _uhit = vec4(4.5, 0.0, 0.0, 0.0);
(_uhit = (((_usdSphere((_up - vec3(0.0, -2.0, 0.0)), 2.0) < _uhit.x)) ? (vec4(_usdSphere((_up - vec3(0.0, -2.0, 0.0)), 2.0), 0.1, 0.0, 0.0)) : (_uhit)));
vec4 _ubound = (((_usdBox((_up - vec3(0.0, 0.5, 0.0)), vec3(0.30000001, 0.5, 0.30000001)) < _uhit.x)) ? (vec4(_usdBox((_up - vec3(0.0, 0.5, 0.0)), vec3(0.30000001, 0.5, 0.30000001)), -0.1, 0.0, 0.0)) : (_uhit));
if ((_ubound.y < 0.0))
{
(_uhit = (((_ubody(_up) < _uhit.x)) ? (vec4(_ubody(_up), 0.2, 0.0, 0.0)) : (_uhit)));
}
return _uhit;
}
vec4 _umarch(in vec3 _uro, in vec3 _urd, in float _umaxD){
vec4 _ures = vec4(0.0, 0.0, 0.0, 0.0);
float _ud = 0.0;
float _unewD = 0.0099999998;
while (((_unewD >= 0.0099999998) && (_ud < _umaxD)))
{
(_ures = _umap((_uro + (_urd * _ud))));
(_unewD = _ures.x);
(_ud = min(_umaxD, (_ud + _unewD)));
}
return vec4(_ud, _ures.yzw);
}
vec3 _unormal(in vec3 _up){
vec2 _un = vec2(1.0000001e-05, -1.0000001e-05);
return normalize(((((_un.xyy * _umap((_up + _un.xyy)).x) + (_un.yxy * _umap((_up + _un.yxy)).x)) + (_un.yyx * _umap((_up + _un.yyx)).x)) + (_un.xxx * _umap((_up + _un.xxx)).x)));
}
vec4 _usky(in vec3 _urd){
(_urd.xz = (mat2(0.76604444, 0.64278764, -0.64278764, 0.76604444) * _urd.xz));
vec4 _ugrad = (mix(vec4(0.0, 0.0, 0.0, 0.0), vec4(0.69999999, 0.80000001, 0.89999998, 1.0), clamp(((-_urd.z) - 0.0), 0.0, 1.0)) + mix(vec4(0.0, 0.0, 0.0, 0.0), vec4(0.80000001, 0.60000002, 0.40000001, 1.0), clamp(((+_urd.z) - 0.25), 0.0, 1.0)));
return mix(vec4(1.0, 1.0, 1.0, 1.0), (clamp((_urd.y + 0.5), 0.0, 1.0) * _ugrad), clamp(((-_urd.y) + 1.35), 0.0, 1.0));
}
float _ulight(in vec3 _ul, in vec3 _un, in vec3 _uh, in bool _ush){
vec3 _ulh = normalize((_ul - _uh));
float _udiff = dot(_un, _ulh);
float _ushadow = 0.0;
if (_ush)
{
(_ushadow = (1.0 - (_umarch(_uh, _ulh, 4.5).x / 4.5)));
}
return clamp((_udiff - _ushadow), 0.0, 1.0);
}
vec4 _urender(in vec3 _uro, in vec3 _urd){
vec4 _um = _umarch(_uro, _urd, 4.5);
float _uhd = _um.x;
vec3 _uh = (_uro + (_urd * (_uhd - 0.02)));
vec3 _un = _unormal(_uh);
vec4 _ucol = vec4(0.0, 0.0, 0.0, 0.0);
if ((_uhd < 4.48))
{
(_ucol.xyz = (((vec3(0.1, 0.1, 0.1) + (vec3(0.0, 0.1, 0.2) * _ulight(vec3(0.0, -100.0, 0.0), _un, _uh, false))) + (vec3(0.40000001, 0.30000001, 0.2) * _ulight(vec3(50.0, 100.0, 100.0), _un, _uh, false))) + (vec3(0.60000002, 0.60000002, 0.60000002) * _ulight(vec3(-50.0, 100.0, -100.0), _un, _uh, true))));
(_ucol.w = 1.0);
}
return _ucol;
}
void _umainImage(out vec4 _ufragColor, in vec2 _ufragCoord){
vec2 _uuv = ((_ufragCoord / _uu_resolution.xy) - 0.5);
(_uuv.x *= (_uu_resolution.x / _uu_resolution.y));
vec3 _uro = vec3(0.0, 0.5, -2.0);
float _ua = (3.8415928 + (((0.5 - (0.0 / _uu_resolution.x)) * 3.1415927) * 2.0));
(_uro.xz = (mat2(cos(_ua), sin(_ua), (-sin(_ua)), cos(_ua)) * _uro.xz));
float _ucp = 1.0;
vec3 _urd = normalize(vec3(_uuv.x, _uuv.y, _ucp));
(_urd.xz = (mat2(cos(_ua), sin(_ua), (-sin(_ua)), cos(_ua)) * _urd.xz));
vec4 _ucol = _urender(_uro, _urd);
if ((_ucol.w < 0.0099999998))
{
(_ucol = _usky(_urd));
}
(_ufragColor = _ucol);
}

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
    _umainImage(fragColor,fragCoord);
}





void main() {
    vec4 ret;
    mainImage(ret, gl_FragCoord.xy);
    glFragColor = ret;
}

original shader link where I found this bug (shader not my own) - Shadertoy link to original shader.

this bug Can be similar to my other bugreports, every of them still works nan of it fixed: