#pragma clang diagnostic ignored "-Wmissing-prototypes" #pragma clang diagnostic ignored "-Wmissing-braces" #pragma clang diagnostic ignored "-Wunused-variable" #include #include template struct unsafe_array { T __Elements[Num ? Num : 1]; constexpr size_t size() const thread { return Num; } constexpr size_t max_size() const thread { return Num; } constexpr bool empty() const thread { return Num == 0; } constexpr size_t size() const device { return Num; } constexpr size_t max_size() const device { return Num; } constexpr bool empty() const device { return Num == 0; } constexpr size_t size() const constant { return Num; } constexpr size_t max_size() const constant { return Num; } constexpr bool empty() const constant { return Num == 0; } constexpr size_t size() const threadgroup { return Num; } constexpr size_t max_size() const threadgroup { return Num; } constexpr bool empty() const threadgroup { return Num == 0; } thread T &operator[](size_t pos) thread { return __Elements[pos]; } constexpr const thread T &operator[](size_t pos) const thread { return __Elements[pos]; } device T &operator[](size_t pos) device { return __Elements[pos]; } constexpr const device T &operator[](size_t pos) const device { return __Elements[pos]; } constexpr const constant T &operator[](size_t pos) const constant { return __Elements[pos]; } threadgroup T &operator[](size_t pos) threadgroup { return __Elements[pos]; } constexpr const threadgroup T &operator[](size_t pos) const threadgroup { return __Elements[pos]; } }; using namespace metal; struct main0_out { float4 FragColor [[color(0)]]; }; static inline __attribute__((always_inline)) float4 foo(thread const float4& foo_1) { return foo_1 + float4(1.0); } static inline __attribute__((always_inline)) float4 foo(thread const float3& foo_1) { return foo_1.xyzz + float4(1.0); } static inline __attribute__((always_inline)) float4 foo_1(thread const float4& foo_2) { return foo_2 + float4(2.0); } static inline __attribute__((always_inline)) float4 foo(thread const float2& foo_2) { return foo_2.xyxy + float4(2.0); } fragment main0_out main0() { main0_out out = {}; float4 foo_3 = float4(1.0); float4 foo_2 = foo(foo_3); float3 foo_5 = float3(1.0); float4 foo_4 = foo(foo_5); float4 foo_7 = float4(1.0); float4 foo_6 = foo_1(foo_7); float2 foo_9 = float2(1.0); float4 foo_8 = foo(foo_9); out.FragColor = ((foo_2 + foo_4) + foo_6) + foo_8; return out; }