SKIP: FAILED

#include <metal_stdlib>

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

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

Compilation failed: 

program_source:5:15: error: no matching function for call to 'frexp'
  float res = frexp(1.0f, *(&(*(tint_symbol_1))));
              ^~~~~
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4560:18: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup int'), parameter type must be 'int &'
METAL_FUNC float frexp(float x, thread int &exp)
                 ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3092:17: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup int'), parameter type must be 'int &'
METAL_FUNC half frexp(half x, thread int &exp)
                ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3336:18: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int2 &' (aka 'int2 &') for 2nd argument
METAL_FUNC half2 frexp(half2 x, thread int2 &exp)
                 ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3580:18: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int3 &' (aka 'int3 &') for 2nd argument
METAL_FUNC half3 frexp(half3 x, thread int3 &exp)
                 ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3824:18: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int4 &' (aka 'int4 &') for 2nd argument
METAL_FUNC half4 frexp(half4 x, thread int4 &exp)
                 ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4804:19: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int2 &' (aka 'int2 &') for 2nd argument
METAL_FUNC float2 frexp(float2 x, thread int2 &exp)
                  ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5048:19: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int3 &' (aka 'int3 &') for 2nd argument
METAL_FUNC float3 frexp(float3 x, thread int3 &exp)
                  ^
/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5292:19: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int4 &' (aka 'int4 &') for 2nd argument
METAL_FUNC float4 frexp(float4 x, thread int4 &exp)
                  ^
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)) {
                              ^~
                              =


