#include <metal_stdlib>

using namespace metal;

struct modf_result_f32 {
  float fract;
  float whole;
};
struct frexp_result_f32 {
  float fract;
  int exp;
};
void deref_modf() {
  modf_result_f32 a = modf_result_f32{.fract=0.5f, .whole=1.0f};
  float fract = a.fract;
  float whole = a.whole;
}

void no_deref_modf() {
  modf_result_f32 a = modf_result_f32{.fract=0.5f, .whole=1.0f};
  float fract = a.fract;
  float whole = a.whole;
}

void deref_frexp() {
  frexp_result_f32 a = frexp_result_f32{.fract=0.75f, .exp=1};
  float fract = a.fract;
  int exp = a.exp;
}

void no_deref_frexp() {
  frexp_result_f32 a = frexp_result_f32{.fract=0.75f, .exp=1};
  float fract = a.fract;
  int exp = a.exp;
}

kernel void tint_symbol() {
  deref_modf();
  no_deref_modf();
  deref_frexp();
  no_deref_frexp();
  return;
}

