SKIP: FAILED



Validation Failure:
#include <metal_stdlib>

using namespace metal;
void fwidthCoarse_e653f7() {
  float2 res =   fwidth(float2());
}

vertex void vertex_main() {
  fwidthCoarse_e653f7();
  return;
}

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

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


tint_YU6pTb.metal:5:10: warning: unused variable 'res' [-Wunused-variable]
  float2 res =   fwidth(float2());
         ^
tint_YU6pTb.metal:8:13: error: vertex function 'vertex_main' uses unsupported builtin functions
vertex void vertex_main() {
            ^
note: function air.fwidth.v2f32 is not allowed within a vertex function
tint_YU6pTb.metal:18:13: error: kernel function 'compute_main' uses unsupported builtin functions
kernel void compute_main() {
            ^
note: function air.fwidth.v2f32 is not allowed within a kernel function
1 warning and 2 errors generated.
