SKIP: FAILED #include 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)) { ^~ =