SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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
    %x_28:f32 = load %8
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %x_30:f32 = load %10
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %x_32:f32 = load %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %x_34:f32 = load %14
    %16:bool = gt %x_32, %x_34
    %17:f32 = select %x_28, %x_30, %16
    store %a, %17
    %x_37:f32 = load %a
    %19:f32 = log %x_37
    %20:f32 = cos %19
    store %b, %20
    %x_40:f32 = load %b
    %22:vec4<f32> = construct %x_40, %x_40, %x_40, %x_40
    store %x_GLF_color, %22
    %x_42:f32 = load %b
    %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_44:f32 = load %24
    %x_45:bool = gt %x_42, %x_44
    store %x_52_phi, %x_45
    if %x_45 [t: %b3] {  # if_1
      %b3 = block {  # true
        %x_48:f32 = load %b
        %28:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %x_50:f32 = load %28
        %30:bool = lt %x_48, %x_50
        store %x_51, %30
        %31:bool = load %x_51
        store %x_52_phi, %31
        exit_if  # if_1
      }
    }
    %x_52:bool = load %x_52_phi
    if %x_52 [t: %b4] {  # if_2
      %b4 = block {  # true
        %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %x_56:f32 = load %33
        %35:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
        %x_58:f32 = load %35
        %37:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
        %x_60:f32 = load %37
        %39:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %x_62:f32 = load %39
        %41:vec4<f32> = construct %x_56, %x_58, %x_60, %x_62
        store %x_GLF_color, %41
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %43:void = call %main_1
    %44:vec4<f32> = load %x_GLF_color
    %45:main_out = construct %44
    ret %45
  }
}

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