SKIP: FAILED

builtins/gen/isFinite/f31987.wgsl:28:25 warning: use of deprecated builtin
  var res: vec4<bool> = isFinite(vec4<f32>());
                        ^^^^^^^^

#version 310 es
precision mediump float;

void isFinite_f31987() {
  bvec4 res = isfinite(vec4(0.0f, 0.0f, 0.0f, 0.0f));
}

vec4 vertex_main() {
  isFinite_f31987();
  return vec4(0.0f, 0.0f, 0.0f, 0.0f);
}

void main() {
  vec4 inner_result = vertex_main();
  gl_Position = inner_result;
  gl_Position.y = -(gl_Position.y);
  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
  return;
}
Error parsing GLSL shader:
ERROR: 0:5: 'isfinite' : no matching overloaded function found
ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 4-component vector of bool'
ERROR: 0:5: '' : compilation terminated
ERROR: 3 compilation errors.  No code generated.



#version 310 es
precision mediump float;

void isFinite_f31987() {
  bvec4 res = isfinite(vec4(0.0f, 0.0f, 0.0f, 0.0f));
}

void fragment_main() {
  isFinite_f31987();
}

void main() {
  fragment_main();
  return;
}
Error parsing GLSL shader:
ERROR: 0:5: 'isfinite' : no matching overloaded function found
ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 4-component vector of bool'
ERROR: 0:5: '' : compilation terminated
ERROR: 3 compilation errors.  No code generated.



#version 310 es
precision mediump float;

void isFinite_f31987() {
  bvec4 res = isfinite(vec4(0.0f, 0.0f, 0.0f, 0.0f));
}

void compute_main() {
  isFinite_f31987();
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  compute_main();
  return;
}
Error parsing GLSL shader:
ERROR: 0:5: 'isfinite' : no matching overloaded function found
ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp 4-component vector of bool'
ERROR: 0:5: '' : compilation terminated
ERROR: 3 compilation errors.  No code generated.



