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;
}


layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
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);
  return;
}
void main() {
  tint_symbol();
}


Error parsing GLSL shader:
ERROR: 0:5: 'uint4' : undeclared identifier 
ERROR: 0:5: '' : compilation terminated 
ERROR: 2 compilation errors.  No code generated.



