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, 2> @offset(0)
}

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

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

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

$B1: {  # root
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%func_ = func():vec2<f32> {
  $B2: {
    %v:ptr<function, vec2<f32>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %indexable:ptr<function, array<vec2<f32>, 3>, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %9:f32 = load %8
    %x_67:f32 = let %9
    store_vector_element %v, 1u, %x_67
    store %a, 2i
    %11:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %12:f32 = load %11
    %x_70:f32 = let %12
    %14:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %15:f32 = load %14
    %x_73:f32 = let %15
    %17:vec2<f32> = load %v
    %x_75:vec2<f32> = let %17
    %19:i32 = load %a
    %x_77:i32 = let %19
    %21:vec2<f32> = construct %x_70, %x_70
    %22:vec2<f32> = let %21
    %23:vec2<f32> = construct %x_73, %x_73
    %24:array<vec2<f32>, 3> = construct %22, %23, %x_75
    store %indexable, %24
    %25:ptr<function, vec2<f32>, read_write> = access %indexable, %x_77
    %26:vec2<f32> = load %25
    %x_79:vec2<f32> = let %26
    ret %x_79
  }
}
%main_1 = func():void {
  $B3: {
    %29:vec2<f32> = call %func_
    %x_40:vec2<f32> = let %29
    %31:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %32:f32 = load %31
    %x_43:f32 = let %32
    %34:f32 = access %x_40, 1u
    %35:bool = eq %34, %x_43
    if %35 [t: $B4, f: $B5] {  # if_1
      $B4: {  # true
        %36:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %37:i32 = load %36
        %x_49:i32 = let %37
        %39:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %40:i32 = load %39
        %x_52:i32 = let %40
        %42:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %43:i32 = load %42
        %x_55:i32 = let %43
        %45:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %46:i32 = load %45
        %x_58:i32 = let %46
        %48:f32 = convert %x_49
        %49:f32 = let %48
        %50:f32 = convert %x_52
        %51:f32 = let %50
        %52:f32 = convert %x_55
        %53:f32 = let %52
        %54:f32 = convert %x_58
        %55:vec4<f32> = construct %49, %51, %53, %54
        store %x_GLF_color, %55
        exit_if  # if_1
      }
      $B5: {  # false
        %56:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %57:i32 = load %56
        %x_62:i32 = let %57
        %59:f32 = convert %x_62
        %x_63:f32 = let %59
        %61:vec4<f32> = construct %x_63, %x_63, %x_63, %x_63
        store %x_GLF_color, %61
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %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.  *
********************************************************************
