SKIP: FAILED

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

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 5> @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
}

%main_1 = func():void {
  $B2: {
    %a:ptr<function, f32, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %x_51:ptr<function, bool, read_write> = var
    %x_52_phi:ptr<function, bool, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %9:f32 = load %8
    %x_28:f32 = let %9
    %11:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %12:f32 = load %11
    %x_30:f32 = let %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %15:f32 = load %14
    %x_32:f32 = let %15
    %17:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %18:f32 = load %17
    %x_34:f32 = let %18
    %20:bool = gt %x_32, %x_34
    %21:f32 = select %x_28, %x_30, %20
    store %a, %21
    %22:f32 = load %a
    %x_37:f32 = let %22
    %24:f32 = log %x_37
    %25:f32 = cos %24
    store %b, %25
    %26:f32 = load %b
    %x_40:f32 = let %26
    %28:vec4<f32> = construct %x_40, %x_40, %x_40, %x_40
    store %x_GLF_color, %28
    %29:f32 = load %b
    %x_42:f32 = let %29
    %31:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %32:f32 = load %31
    %x_44:f32 = let %32
    %34:bool = gt %x_42, %x_44
    %x_45:bool = let %34
    store %x_52_phi, %x_45
    if %x_45 [t: $B3] {  # if_1
      $B3: {  # true
        %36:f32 = load %b
        %x_48:f32 = let %36
        %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %39:f32 = load %38
        %x_50:f32 = let %39
        %41:bool = lt %x_48, %x_50
        store %x_51, %41
        %42:bool = load %x_51
        store %x_52_phi, %42
        exit_if  # if_1
      }
    }
    %43:bool = load %x_52_phi
    %x_52:bool = let %43
    if %x_52 [t: $B4] {  # if_2
      $B4: {  # true
        %45:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %46:f32 = load %45
        %x_56:f32 = let %46
        %48:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
        %49:f32 = load %48
        %x_58:f32 = let %49
        %51:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
        %52:f32 = load %51
        %x_60:f32 = let %52
        %54:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %55:f32 = load %54
        %x_62:f32 = let %55
        %57:vec4<f32> = construct %x_56, %x_58, %x_60, %x_62
        store %x_GLF_color, %57
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %59:void = call %main_1
    %60:vec4<f32> = load %x_GLF_color
    %61:main_out = construct %60
    ret %61
  }
}

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