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
    %11:f32 = load %10
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %13:f32 = load %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %15:f32 = load %14
    %16:array<f32, 3> = construct %11, %13, %15
    store %A1, %16
    %17:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %18:i32 = load %17
    %19:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %20:i32 = load %19
    %21:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %22:i32 = load %21
    %23:i32 = clamp %18, %20, %22
    store %a, %23
    %24:i32 = load %a
    %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %26:i32 = load %25
    %27:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %28:i32 = load %27
    %29:i32 = clamp %24, %26, %28
    %30:ptr<function, f32, read_write> = access %A1, %29
    %31:f32 = load %30
    store %b, %31
    %32:f32 = load %b
    %33:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %34:i32 = load %33
    %35:ptr<function, f32, read_write> = access %A1, %34
    %36:f32 = load %35
    %37:bool = lt %32, %36
    if %37 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %38:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %39:f32 = load %38
        %40:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %41:f32 = load %40
        %42:bool = gt %39, %41
        store %x_36, %42
        exit_if  # if_1
      }
      %b4 = block {  # false
        %43:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %44:f32 = load %43
        %45:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %46:i32 = load %45
        %47:ptr<function, f32, read_write> = access %A1, %46
        %48:f32 = load %47
        %49:bool = lt %44, %48
        store %x_36, %49
        exit_if  # if_1
      }
    }
    %50:bool = load %x_36
    store %c, %50
    %51:bool = load %c
    if %51 [t: %b5, f: %b6] {  # if_2
      %b5 = block {  # true
        %52:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %53:i32 = load %52
        %54:f32 = convert %53
        %55:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %56:i32 = load %55
        %57:f32 = convert %56
        %58:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %59:i32 = load %58
        %60:f32 = convert %59
        %61:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %62:i32 = load %61
        %63:f32 = convert %62
        %64:vec4<f32> = construct %54, %57, %60, %63
        store %x_GLF_color, %64
        exit_if  # if_2
      }
      %b6 = block {  # false
        %65:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %66:f32 = load %65
        %67:vec4<f32> = construct %66
        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.  *
********************************************************************
