SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 3> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 2> @offset(0)
}

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

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

%main_1 = func():void {
  $B2: {
    %v0:ptr<function, vec2<f32>, read_write> = var
    %v1:ptr<function, vec2<f32>, read_write> = var
    %7:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %8:f32 = load %7
    %9:vec2<f32> = construct %8, 3.79999995231628417969f
    store %v0, %9
    %10:vec2<f32> = load %v0
    %11:vec2<f32> = sub %10, vec2<f32>(1.0f)
    %12:vec2<f32> = let %11
    %13:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %14:f32 = load %13
    %15:vec2<f32> = construct %14
    %16:vec2<f32> = clamp %12, vec2<f32>(0.0f), %15
    store %v1, %16
    %17:vec2<f32> = load %v1
    %18:vec2<f32> = let %17
    %19:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %20:f32 = load %19
    %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %22:f32 = load %21
    %23:vec2<f32> = construct %20, %22
    %24:vec2<bool> = eq %18, %23
    %25:bool = all %24
    if %25 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %26:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %27:i32 = load %26
        %28:f32 = convert %27
        %29:f32 = let %28
        %30:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %31:i32 = load %30
        %32:f32 = convert %31
        %33:f32 = let %32
        %34:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %35:i32 = load %34
        %36:f32 = convert %35
        %37:f32 = let %36
        %38:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %39:i32 = load %38
        %40:f32 = convert %39
        %41:vec4<f32> = construct %29, %33, %37, %40
        store %x_GLF_color, %41
        exit_if  # if_1
      }
      $B4: {  # false
        %42:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:vec4<f32> = construct %44
        store %x_GLF_color, %45
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %47:void = call %main_1
    %48:vec4<f32> = load %x_GLF_color
    %49:main_out = construct %48
    ret %49
  }
}

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