SKIP: FAILED

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

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

S = struct @align(4) {
  a:i32 @offset(0)
  b:i32 @offset(4)
  c:i32 @offset(8)
}

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

%b1 = block {  # root
  %x_7: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, array<S, 2>, read_write> = var
    %5:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %x_29:i32 = load %5
    %7:ptr<function, S, read_write> = access %A, %x_29
    %8:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %9:i32 = load %8
    %10:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %11:i32 = load %10
    %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %13:i32 = load %12
    %14:S = construct %9, %11, %13
    store %7, %14
    %15:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %x_39:i32 = load %15
    %17:ptr<function, S, read_write> = access %A, %x_39
    %18:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %19:i32 = load %18
    %20:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %21:i32 = load %20
    %22:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %23:i32 = load %22
    %24:S = construct %19, %21, %23
    store %17, %24
    %25:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %26:i32 = load %25
    %27:ptr<function, i32, read_write> = access %A, %26, 1u
    %28:i32 = load %27
    %29:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %30:i32 = load %29
    %31:bool = eq %28, %30
    if %31 [t: %b3] {  # if_1
      %b3 = block {  # true
        %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_58:i32 = load %32
        %34:i32 = clamp %x_58, 1i, 2i
        %35:ptr<function, i32, read_write> = access %A, %34, 1u
        %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %37:i32 = load %36
        store %35, %37
        exit_if  # if_1
      }
    }
    %38:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %39:i32 = load %38
    %40:ptr<function, i32, read_write> = access %A, %39, 1u
    %41:i32 = load %40
    %42:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %43:i32 = load %42
    %44:bool = eq %41, %43
    if %44 [t: %b4, f: %b5] {  # if_2
      %b4 = block {  # true
        %45:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %46:i32 = load %45
        %47:f32 = convert %46
        %48:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %49:i32 = load %48
        %50:f32 = convert %49
        %51:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %52:i32 = load %51
        %53:f32 = convert %52
        %54:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %55:i32 = load %54
        %56:f32 = convert %55
        %57:vec4<f32> = construct %47, %50, %53, %56
        store %x_GLF_color, %57
        exit_if  # if_2
      }
      %b5 = block {  # false
        %58:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %59:i32 = load %58
        %60:f32 = convert %59
        %61:vec4<f32> = construct %60
        store %x_GLF_color, %61
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b6 {
  %b6 = block {
    %63:void = call %main_1
    %64:vec4<f32> = load %x_GLF_color
    %65:main_out = construct %64
    ret %65
  }
}

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