SKIP: FAILED

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

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

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

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

%main_1 = func():void {
  $B2: {
    %v:ptr<function, vec4<f32>, read_write> = var
    %f:ptr<function, f32, read_write> = var
    %x_56:ptr<function, bool, read_write> = var
    %x_57_phi:ptr<function, bool, read_write> = var
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %10:i32 = load %9
    %x_32:i32 = let %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %13:i32 = load %12
    %x_35:i32 = let %13
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %16:i32 = load %15
    %x_38:i32 = let %16
    %18:f32 = convert %x_32
    %19:f32 = let %18
    %20:f32 = convert %x_35
    %21:f32 = let %20
    %22:f32 = convert %x_38
    %23:vec4<f32> = construct %19, %21, -621.59600830078125f, %22
    store %v, %23
    %24:vec4<f32> = load %v
    %x_41:vec4<f32> = let %24
    %26:vec4<f32> = trunc %x_41
    %27:vec4<f32> = atan %26
    %28:f32 = access %27, 2u
    store %f, %28
    %29:f32 = load %f
    %x_45:f32 = let %29
    %31:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %32:f32 = load %31
    %x_47:f32 = let %32
    %34:f32 = negation %x_47
    %35:bool = gt %x_45, %34
    %x_49:bool = let %35
    store %x_57_phi, %x_49
    if %x_49 [t: $B3] {  # if_1
      $B3: {  # true
        %37:f32 = load %f
        %x_52:f32 = let %37
        %39:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
        %40:f32 = load %39
        %x_54:f32 = let %40
        %42:f32 = negation %x_54
        %43:bool = lt %x_52, %42
        store %x_56, %43
        %44:bool = load %x_56
        store %x_57_phi, %44
        exit_if  # if_1
      }
    }
    %45:bool = load %x_57_phi
    %x_57:bool = let %45
    if %x_57 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        %47:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %48:i32 = load %47
        %x_62:i32 = let %48
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %51:i32 = load %50
        %x_65:i32 = let %51
        %53:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %54:i32 = load %53
        %x_68:i32 = let %54
        %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %57:i32 = load %56
        %x_71:i32 = let %57
        %59:f32 = convert %x_62
        %60:f32 = let %59
        %61:f32 = convert %x_65
        %62:f32 = let %61
        %63:f32 = convert %x_68
        %64:f32 = let %63
        %65:f32 = convert %x_71
        %66:vec4<f32> = construct %60, %62, %64, %65
        store %x_GLF_color, %66
        exit_if  # if_2
      }
      $B5: {  # false
        %67:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %68:i32 = load %67
        %x_75:i32 = let %68
        %70:f32 = convert %x_75
        %x_76:f32 = let %70
        %72:vec4<f32> = construct %x_76, %x_76, %x_76, %x_76
        store %x_GLF_color, %72
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %74:void = call %main_1
    %75:vec4<f32> = load %x_GLF_color
    %76:main_out = construct %75
    ret %76
  }
}

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