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

#include <metal_stdlib>

using namespace metal;
struct tint_symbol {
  float4 value [[position]];
};

void isNan_4d280d() {
  bool4 res = isnan(float4());
}

float4 vertex_main_inner() {
  isNan_4d280d();
  return float4();
}

vertex tint_symbol vertex_main() {
  float4 const inner_result = vertex_main_inner();
  tint_symbol wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

fragment void fragment_main() {
  isNan_4d280d();
  return;
}

kernel void compute_main() {
  isNan_4d280d();
  return;
}

