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_69:ptr<function, i32, read_write> = var
    %x_72: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_59:vec2<f32> = let %12
    %14:f32 = access %x_59, 0u
    %15:f32 = mul %14, 10.0f
    %16:i32 = call %tint_f32_to_i32, %15
    %18:i32 = let %16
    %19:f32 = access %x_59, 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_67:i32 = let %23
    store %x_69, 100i
    store %x_72, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_70:ptr<function, i32, read_write> = var
        %x_73:ptr<function, i32, read_write> = var
        %27:i32 = load %x_72
        %28:bool = lt %27, %x_67
        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_69
        %30:i32 = mul 4i, %29
        %31:i32 = load %x_69
        %32:i32 = sub 1000i, %31
        %33:i32 = mul %30, %32
        %34:i32 = call %tint_div_i32, %33, 1000i
        store %x_70, %34
        %36:i32 = load %x_72
        %37:i32 = add %36, 1i
        store %x_73, %37
        %38:i32 = load %x_70
        store %x_69, %38
        %39:i32 = load %x_73
        store %x_72, %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:array<vec4<f32>, 16> = load %indexable
    %x_80:array<vec4<f32>, 16> = let %40
    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
    store %indexable, %x_80
    %x_81:vec2<f32> = let vec2<f32>(1.0f, 0.5f)
    %43:i32 = load %x_69
    %44:i32 = call %tint_mod_i32, %43, 16i
    %46:ptr<function, vec4<f32>, read_write> = access %indexable, %44
    %47:vec4<f32> = load %46
    store %x_GLF_color, %47
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B7: {
    store %gl_FragCoord, %gl_FragCoord_param
    %50:void = call %main_1
    %51:vec4<f32> = load %x_GLF_color
    %52:main_out = construct %51
    ret %52
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B8: {
    %55:bool = eq %rhs, 0i
    %56:bool = eq %lhs, -2147483648i
    %57:bool = eq %rhs, -1i
    %58:bool = and %56, %57
    %59:bool = or %55, %58
    %60:i32 = select %rhs, 1i, %59
    %61:i32 = div %lhs, %60
    ret %61
  }
}
%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
  $B9: {
    %64:bool = eq %rhs_1, 0i
    %65:bool = eq %lhs_1, -2147483648i
    %66:bool = eq %rhs_1, -1i
    %67:bool = and %65, %66
    %68:bool = or %64, %67
    %69:i32 = select %rhs_1, 1i, %68
    %70:i32 = let %69
    %71:i32 = div %lhs_1, %70
    %72:i32 = mul %71, %70
    %73:i32 = sub %lhs_1, %72
    ret %73
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B10: {
    %75:i32 = convert %value
    %76:bool = gte %value, -2147483648.0f
    %77:i32 = select -2147483648i, %75, %76
    %78:bool = lte %value, 2147483520.0f
    %79:i32 = select 2147483647i, %77, %78
    ret %79
  }
}

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.  *
********************************************************************
