SKIP: FAILED

intrinsics/repeated_use.wgsl:5:9 warning: use of deprecated intrinsic
    _ = isNormal(vec4<f32>());
        ^^^^^^^^

intrinsics/repeated_use.wgsl:6:9 warning: use of deprecated intrinsic
    _ = isNormal(vec4<f32>(1.));
        ^^^^^^^^

intrinsics/repeated_use.wgsl:7:9 warning: use of deprecated intrinsic
    _ = isNormal(vec4<f32>(1., 2., 3., 4.));
        ^^^^^^^^

intrinsics/repeated_use.wgsl:9:9 warning: use of deprecated intrinsic
    _ = isNormal(vec3<f32>());
        ^^^^^^^^

intrinsics/repeated_use.wgsl:10:9 warning: use of deprecated intrinsic
    _ = isNormal(vec3<f32>(1.));
        ^^^^^^^^

intrinsics/repeated_use.wgsl:11:9 warning: use of deprecated intrinsic
    _ = isNormal(vec3<f32>(1., 2., 3.));
        ^^^^^^^^

intrinsics/repeated_use.wgsl:13:9 warning: use of deprecated intrinsic
    _ = isNormal(vec2<f32>());
        ^^^^^^^^

intrinsics/repeated_use.wgsl:14:9 warning: use of deprecated intrinsic
    _ = isNormal(vec2<f32>(1.));
        ^^^^^^^^

intrinsics/repeated_use.wgsl:15:9 warning: use of deprecated intrinsic
    _ = isNormal(vec2<f32>(1., 2.));
        ^^^^^^^^

intrinsics/repeated_use.wgsl:17:9 warning: use of deprecated intrinsic
    _ = isNormal(1.);
        ^^^^^^^^

intrinsics/repeated_use.wgsl:18:9 warning: use of deprecated intrinsic
    _ = isNormal(2.);
        ^^^^^^^^

intrinsics/repeated_use.wgsl:19:9 warning: use of deprecated intrinsic
    _ = isNormal(3.);
        ^^^^^^^^

#version 310 es
precision mediump float;

bvec4 tint_isNormal(vec4 param_0) {
  uint4 exponent = asuint(param_0) & 0x7f80000;
  uint4 clamped = clamp(exponent, 0x0080000, 0x7f00000);
  return clamped == exponent;
}

bvec3 tint_isNormal_1(vec3 param_0) {
  uint3 exponent = asuint(param_0) & 0x7f80000;
  uint3 clamped = clamp(exponent, 0x0080000, 0x7f00000);
  return clamped == exponent;
}

bvec2 tint_isNormal_2(vec2 param_0) {
  uint2 exponent = asuint(param_0) & 0x7f80000;
  uint2 clamped = clamp(exponent, 0x0080000, 0x7f00000);
  return clamped == exponent;
}

bool tint_isNormal_3(float param_0) {
  uint exponent = asuint(param_0) & 0x7f80000;
  uint clamped = clamp(exponent, 0x0080000, 0x7f00000);
  return clamped == exponent;
}


void tint_symbol() {
  tint_isNormal(vec4(0.0f, 0.0f, 0.0f, 0.0f));
  tint_isNormal(vec4(1.0f));
  tint_isNormal(vec4(1.0f, 2.0f, 3.0f, 4.0f));
  tint_isNormal_1(vec3(0.0f, 0.0f, 0.0f));
  tint_isNormal_1(vec3(1.0f));
  tint_isNormal_1(vec3(1.0f, 2.0f, 3.0f));
  tint_isNormal_2(vec2(0.0f, 0.0f));
  tint_isNormal_2(vec2(1.0f));
  tint_isNormal_2(vec2(1.0f, 2.0f));
  tint_isNormal_3(1.0f);
  tint_isNormal_3(2.0f);
  tint_isNormal_3(3.0f);
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  tint_symbol();
  return;
}
Error parsing GLSL shader:
ERROR: 0:5: 'uint4' : undeclared identifier 
ERROR: 0:5: '' : compilation terminated 
ERROR: 2 compilation errors.  No code generated.



