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:ptr<function, bool, read_write> = var
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %9:i32 = load %8
    %10:vec2<i32> = construct -1i, %9
    %11:vec2<f32> = bitcast %10
    %12:vec2<f32> = cos %11
    %13:vec2<f32> = cos %12
    store %v1, %13
    %14:f32 = load_vector_element %v1, 0u
    %15:vec4<f32> = construct %14
    store %x_GLF_color, %15
    %16:f32 = load_vector_element %v1, 1u
    %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %18:f32 = load %17
    %19:bool = gt %16, %18
    %x_47:bool = let %19
    store %x_55, %x_47
    if %x_47 [t: $B3] {  # if_1
      $B3: {  # true
        %21:f32 = load_vector_element %v1, 1u
        %22:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
        %23:f32 = load %22
        %24:bool = lt %21, %23
        store %x_54, %24
        %25:bool = load %x_54
        store %x_55, %25
        exit_if  # if_1
      }
    }
    %26:bool = load %x_55
    if %26 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %28:i32 = load %27
        %29:f32 = convert %28
        %30:f32 = let %29
        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %32:i32 = load %31
        %33:f32 = convert %32
        %34:f32 = let %33
        %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %36:i32 = load %35
        %37:f32 = convert %36
        %38:f32 = let %37
        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %40:i32 = load %39
        %41:f32 = convert %40
        %42:vec4<f32> = construct %30, %34, %38, %41
        store %x_GLF_color, %42
        exit_if  # if_2
      }
      $B5: {  # false
        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %44:i32 = load %43
        %45:f32 = convert %44
        %46:vec4<f32> = construct %45
        store %x_GLF_color, %46
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %48:void = call %main_1
    %49:vec4<f32> = load %x_GLF_color
    %50:main_out = construct %49
    ret %50
  }
}

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