SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  resolution:vec2<f32> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
    %x_66:ptr<function, i32, read_write> = var
    %x_69:ptr<function, i32, read_write> = var
    %8:vec4<f32> = load %gl_FragCoord
    %9:vec2<f32> = swizzle %8, xy
    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %11:vec2<f32> = load %10
    %12:vec2<f32> = div %9, %11
    %x_56:vec2<f32> = let %12
    %14:f32 = access %x_56, 0u
    %15:f32 = mul %14, 10.0f
    %16:i32 = call %tint_f32_to_i32, %15
    %18:i32 = let %16
    %19:f32 = access %x_56, 1u
    %20:f32 = mul %19, 10.0f
    %21:i32 = call %tint_f32_to_i32, %20
    %22:i32 = mul %21, 10i
    %23:i32 = add %18, %22
    %x_64:i32 = let %23
    store %x_66, 100i
    store %x_69, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_67:ptr<function, i32, read_write> = var
        %x_70:ptr<function, i32, read_write> = var
        %27:i32 = load %x_69
        %28:bool = lt %27, %x_64
        if %28 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %29:i32 = load %x_66
        %30:i32 = mul 4i, %29
        %31:i32 = load %x_66
        %32:i32 = sub 1000i, %31
        %33:i32 = mul %30, %32
        %34:i32 = call %tint_div_i32, %33, 1000i
        store %x_67, %34
        %36:i32 = load %x_69
        %37:i32 = add %36, 1i
        store %x_70, %37
        %38:i32 = load %x_67
        store %x_66, %38
        %39:i32 = load %x_70
        store %x_69, %39
        next_iteration  # -> $B3
      }
    }
    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
    %40:i32 = load %x_66
    %41:i32 = call %tint_mod_i32, %40, 16i
    %43:ptr<function, vec4<f32>, read_write> = access %indexable, %41
    %44:vec4<f32> = load %43
    store %x_GLF_color, %44
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B7: {
    store %gl_FragCoord, %gl_FragCoord_param
    %47:void = call %main_1
    %48:vec4<f32> = load %x_GLF_color
    %49:main_out = construct %48
    ret %49
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B8: {
    %52:bool = eq %rhs, 0i
    %53:bool = eq %lhs, -2147483648i
    %54:bool = eq %rhs, -1i
    %55:bool = and %53, %54
    %56:bool = or %52, %55
    %57:i32 = select %rhs, 1i, %56
    %58:i32 = div %lhs, %57
    ret %58
  }
}
%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
  $B9: {
    %61:bool = eq %rhs_1, 0i
    %62:bool = eq %lhs_1, -2147483648i
    %63:bool = eq %rhs_1, -1i
    %64:bool = and %62, %63
    %65:bool = or %61, %64
    %66:i32 = select %rhs_1, 1i, %65
    %67:i32 = let %66
    %68:i32 = div %lhs_1, %67
    %69:i32 = mul %68, %67
    %70:i32 = sub %lhs_1, %69
    ret %70
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B10: {
    %72:i32 = convert %value
    %73:bool = gte %value, -2147483648.0f
    %74:i32 = select -2147483648i, %72, %73
    %75:bool = lte %value, 2147483520.0f
    %76:i32 = select 2147483647i, %74, %75
    ret %76
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
