SKIP: FAILED

#include <metal_stdlib>

using namespace metal;
void modf_e38ae6(threadgroup float* const tint_symbol_1) {
  float res = modf(1.0f, *(&(*(tint_symbol_1))));
}

kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) {
  threadgroup float tint_symbol_2;
  if ((local_invocation_index == 0u)) {
    tint_symbol_2 = float();
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  modf_e38ae6(&(tint_symbol_2));
  return;
}

Compilation failed: 

program_source:5:15: error: no matching function for call to 'modf'
  float res = modf(1.0f, *(&(*(tint_symbol_1))));
              ^~~~
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4610:18: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup float'), parameter type must be 'float &'
METAL_FUNC float modf(float x, thread float &intval)
                 ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3142:17: note: candidate function not viable: no known conversion from 'threadgroup float' to 'half &' for 2nd argument
METAL_FUNC half modf(half x, thread half &intval)
                ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3386:18: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::half2 &' (aka 'half2 &') for 2nd argument
METAL_FUNC half2 modf(half2 x, thread half2 &intval)
                 ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3630:18: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::half3 &' (aka 'half3 &') for 2nd argument
METAL_FUNC half3 modf(half3 x, thread half3 &intval)
                 ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3874:18: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::half4 &' (aka 'half4 &') for 2nd argument
METAL_FUNC half4 modf(half4 x, thread half4 &intval)
                 ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4854:19: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::float2 &' (aka 'float2 &') for 2nd argument
METAL_FUNC float2 modf(float2 x, thread float2 &intval)
                  ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5098:19: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::float3 &' (aka 'float3 &') for 2nd argument
METAL_FUNC float3 modf(float3 x, thread float3 &intval)
                  ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5342:19: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::float4 &' (aka 'float4 &') for 2nd argument
METAL_FUNC float4 modf(float4 x, thread float4 &intval)
                  ^
program_source:10:31: warning: equality comparison with extraneous parentheses
  if ((local_invocation_index == 0u)) {
       ~~~~~~~~~~~~~~~~~~~~~~~^~~~~
program_source:10:31: note: remove extraneous parentheses around the comparison to silence this warning
  if ((local_invocation_index == 0u)) {
      ~                       ^    ~
program_source:10:31: note: use '=' to turn this equality comparison into an assignment
  if ((local_invocation_index == 0u)) {
                              ^~
                              =


