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_65:ptr<function, i32, read_write> = var
    %x_65_phi:ptr<function, i32, read_write> = var
    %x_68_phi:ptr<function, i32, read_write> = var
    %9:vec4<f32> = load %gl_FragCoord
    %x_51:vec4<f32> = let %9
    %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %12:vec2<f32> = load %11
    %x_54:vec2<f32> = let %12
    %14:f32 = access %x_51, 0u
    %15:f32 = access %x_51, 1u
    %16:vec2<f32> = construct %14, %15
    %17:vec2<f32> = div %16, %x_54
    %18:vec2<f32> = mul %17, 8.0f
    %19:vec2<f32> = floor %18
    %x_57:vec2<f32> = let %19
    %21:f32 = access %x_57, 0u
    %22:i32 = call %tint_f32_to_i32, %21
    %24:i32 = mul %22, 8i
    %25:i32 = let %24
    %26:f32 = access %x_57, 1u
    %27:i32 = call %tint_f32_to_i32, %26
    %28:i32 = add %25, %27
    %x_63:i32 = let %28
    store %x_65_phi, 0i
    store %x_68_phi, %x_63
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_79:ptr<function, i32, read_write> = var
        %x_80:ptr<function, i32, read_write> = var
        %x_69_phi:ptr<function, i32, read_write> = var
        %33:i32 = load %x_65_phi
        store %x_65, %33
        %34:i32 = load %x_68_phi
        %x_68:i32 = let %34
        %36:bool = gt %x_68, 1i
        if %36 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %37:i32 = and %x_68, 1i
        %38:bool = eq %37, 1i
        if %38 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            %39:i32 = mul 3i, %x_68
            %40:i32 = add %39, 1i
            store %x_79, %40
            %41:i32 = load %x_79
            store %x_69_phi, %41
            exit_if  # if_2
          }
          $B8: {  # false
            %42:i32 = call %tint_div_i32, %x_68, 2i
            store %x_80, %42
            %44:i32 = load %x_80
            store %x_69_phi, %44
            exit_if  # if_2
          }
        }
        %45:i32 = load %x_69_phi
        %x_69:i32 = let %45
        continue  # -> $B4
      }
      $B4: {  # continuing
        %47:i32 = load %x_65
        %48:i32 = add %47, 1i
        %49:i32 = bitcast %48
        store %x_65_phi, %49
        store %x_68_phi, %x_69
        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))
    %50:i32 = load %x_65
    %51:i32 = call %tint_mod_i32, %50, 16i
    %53:i32 = bitcast %51
    %54:ptr<function, vec4<f32>, read_write> = access %indexable, %53
    %55:vec4<f32> = load %54
    %x_83:vec4<f32> = let %55
    store %x_GLF_color, %x_83
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B9: {
    store %gl_FragCoord, %gl_FragCoord_param
    %59:void = call %main_1
    %60:vec4<f32> = load %x_GLF_color
    %61:main_out = construct %60
    ret %61
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B10: {
    %64:bool = eq %rhs, 0i
    %65:bool = eq %lhs, -2147483648i
    %66:bool = eq %rhs, -1i
    %67:bool = and %65, %66
    %68:bool = or %64, %67
    %69:i32 = select %rhs, 1i, %68
    %70:i32 = div %lhs, %69
    ret %70
  }
}
%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
  $B11: {
    %73:bool = eq %rhs_1, 0i
    %74:bool = eq %lhs_1, -2147483648i
    %75:bool = eq %rhs_1, -1i
    %76:bool = and %74, %75
    %77:bool = or %73, %76
    %78:i32 = select %rhs_1, 1i, %77
    %79:i32 = let %78
    %80:i32 = div %lhs_1, %79
    %81:i32 = mul %80, %79
    %82:i32 = sub %lhs_1, %81
    ret %82
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B12: {
    %84:i32 = convert %value
    %85:bool = gte %value, -2147483648.0f
    %86:i32 = select -2147483648i, %84, %85
    %87:bool = lte %value, 2147483520.0f
    %88:i32 = select 2147483647i, %86, %87
    ret %88
  }
}

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