SKIP: FAILED



Validation Failure:
#include <metal_stdlib>

using namespace metal;
void textureDimensions_39a600() {
  int2 res = int2(arg_0.get_width(), arg_0.get_height());
}

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

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

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


tint_IGrYE5.metal:5:19: error: use of undeclared identifier 'arg_0'
  int2 res = int2(arg_0.get_width(), arg_0.get_height());
                  ^
tint_IGrYE5.metal:5:38: error: use of undeclared identifier 'arg_0'
  int2 res = int2(arg_0.get_width(), arg_0.get_height());
                                     ^
2 errors generated.
