SKIP: FAILED

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

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

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

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

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # 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 {
  %b2 = block {
    %A1:ptr<function, array<f32, 3>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %c:ptr<function, bool, read_write> = var
    %x_36:ptr<function, bool, read_write> = var
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %x_38:f32 = load %10
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_40:f32 = load %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %x_42:f32 = load %14
    %16:array<f32, 3> = construct %x_38, %x_40, %x_42
    store %A1, %16
    %17:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %x_45:i32 = load %17
    %19:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %x_47:i32 = load %19
    %21:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %x_49:i32 = load %21
    %23:i32 = clamp %x_45, %x_47, %x_49
    store %a, %23
    %x_51:i32 = load %a
    %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %x_53:i32 = load %25
    %27:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %x_55:i32 = load %27
    %29:i32 = clamp %x_51, %x_53, %x_55
    %30:ptr<function, f32, read_write> = access %A1, %29
    %x_58:f32 = load %30
    store %b, %x_58
    %x_59:f32 = load %b
    %33:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %x_61:i32 = load %33
    %35:ptr<function, f32, read_write> = access %A1, %x_61
    %x_63:f32 = load %35
    %37:bool = lt %x_59, %x_63
    if %37 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %x_69:f32 = load %38
        %40:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %x_71:f32 = load %40
        %42:bool = gt %x_69, %x_71
        store %x_36, %42
        exit_if  # if_1
      }
      %b4 = block {  # false
        %43:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %x_74:f32 = load %43
        %45:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %x_76:i32 = load %45
        %47:ptr<function, f32, read_write> = access %A1, %x_76
        %x_78:f32 = load %47
        %49:bool = lt %x_74, %x_78
        store %x_36, %49
        exit_if  # if_1
      }
    }
    %x_80:bool = load %x_36
    store %c, %x_80
    %x_81:bool = load %c
    if %x_81 [t: %b5, f: %b6] {  # if_2
      %b5 = block {  # true
        %52:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_86:i32 = load %52
        %54:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_89:i32 = load %54
        %56:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_92:i32 = load %56
        %58:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_95:i32 = load %58
        %60:f32 = convert %x_86
        %61:f32 = convert %x_89
        %62:f32 = convert %x_92
        %63:f32 = convert %x_95
        %64:vec4<f32> = construct %60, %61, %62, %63
        store %x_GLF_color, %64
        exit_if  # if_2
      }
      %b6 = block {  # false
        %65:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %x_99:f32 = load %65
        %67:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
        store %x_GLF_color, %67
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b7 {
  %b7 = block {
    %69:void = call %main_1
    %70:vec4<f32> = load %x_GLF_color
    %71:main_out = construct %70
    ret %71
  }
}

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