SKIP: FAILED

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

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

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

buf1 = struct @align(4) {
  x_GLF_uniform_float_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, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%main_1 = func():void {
  $B2: {
    %v1:ptr<function, vec2<f32>, read_write> = var
    %x_54:ptr<function, bool, read_write> = var
    %x_55_phi:ptr<function, bool, read_write> = var
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %9:i32 = load %8
    %x_35:i32 = let %9
    %11:vec2<i32> = construct -1i, %x_35
    %12:vec2<f32> = bitcast %11
    %13:vec2<f32> = cos %12
    %14:vec2<f32> = cos %13
    store %v1, %14
    %15:f32 = load_vector_element %v1, 0u
    %x_41:f32 = let %15
    %17:vec4<f32> = construct %x_41, %x_41, %x_41, %x_41
    store %x_GLF_color, %17
    %18:f32 = load_vector_element %v1, 1u
    %x_44:f32 = let %18
    %20:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %21:f32 = load %20
    %x_46:f32 = let %21
    %23:bool = gt %x_44, %x_46
    %x_47:bool = let %23
    store %x_55_phi, %x_47
    if %x_47 [t: $B3] {  # if_1
      $B3: {  # true
        %25:f32 = load_vector_element %v1, 1u
        %x_51:f32 = let %25
        %27:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
        %28:f32 = load %27
        %x_53:f32 = let %28
        %30:bool = lt %x_51, %x_53
        store %x_54, %30
        %31:bool = load %x_54
        store %x_55_phi, %31
        exit_if  # if_1
      }
    }
    %32:bool = load %x_55_phi
    %x_55:bool = let %32
    if %x_55 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        %34:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %35:i32 = load %34
        %x_60:i32 = let %35
        %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %38:i32 = load %37
        %x_63:i32 = let %38
        %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %41:i32 = load %40
        %x_66:i32 = let %41
        %43:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %44:i32 = load %43
        %x_69:i32 = let %44
        %46:f32 = convert %x_60
        %47:f32 = let %46
        %48:f32 = convert %x_63
        %49:f32 = let %48
        %50:f32 = convert %x_66
        %51:f32 = let %50
        %52:f32 = convert %x_69
        %53:vec4<f32> = construct %47, %49, %51, %52
        store %x_GLF_color, %53
        exit_if  # if_2
      }
      $B5: {  # false
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %55:i32 = load %54
        %x_73:i32 = let %55
        %57:f32 = convert %x_73
        %x_74:f32 = let %57
        %59:vec4<f32> = construct %x_74, %x_74, %x_74, %x_74
        store %x_GLF_color, %59
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %61:void = call %main_1
    %62:vec4<f32> = load %x_GLF_color
    %63:main_out = construct %62
    ret %63
  }
}

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