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)
}

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

$B1: {  # 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: {
    %m0:ptr<function, mat2x2<f32>, read_write> = var
    %m1:ptr<function, mat2x2<f32>, read_write> = var
    %v:ptr<function, vec2<f32>, read_write> = var
    %7:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %8:f32 = load %7
    %x_35:f32 = let %8
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %11:f32 = load %10
    %x_37:f32 = let %11
    %13:vec2<f32> = construct %x_35, -0.540302276611328125f
    %14:vec2<f32> = let %13
    %15:vec2<f32> = construct 0.540302276611328125f, %x_37
    %16:mat2x2<f32> = construct %14, %15
    store %m0, %16
    %17:mat2x2<f32> = load %m0
    %x_41:mat2x2<f32> = let %17
    %19:mat2x2<f32> = load %m0
    %x_42:mat2x2<f32> = let %19
    %21:mat2x2<f32> = mul %x_41, %x_42
    store %m1, %21
    %22:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %23:f32 = load %22
    %x_45:f32 = let %23
    %25:mat2x2<f32> = load %m1
    %x_47:mat2x2<f32> = let %25
    %27:vec2<f32> = construct %x_45, %x_45
    %28:vec2<f32> = mul %27, %x_47
    store %v, %28
    %29:f32 = load_vector_element %v, 0u
    %x_50:f32 = let %29
    %31:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %32:f32 = load %31
    %x_52:f32 = let %32
    %34:bool = lt %x_50, %x_52
    if %34 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %35:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %36:f32 = load %35
        %x_58:f32 = let %36
        %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %39:f32 = load %38
        %x_60:f32 = let %39
        %41:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %42:f32 = load %41
        %x_62:f32 = let %42
        %44:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %45:f32 = load %44
        %x_64:f32 = let %45
        %47:vec4<f32> = construct %x_58, %x_60, %x_62, %x_64
        store %x_GLF_color, %47
        exit_if  # if_1
      }
      $B4: {  # false
        %48:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %49:f32 = load %48
        %x_67:f32 = let %49
        %51:vec4<f32> = construct %x_67, %x_67, %x_67, %x_67
        store %x_GLF_color, %51
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %53:void = call %main_1
    %54:vec4<f32> = load %x_GLF_color
    %55:main_out = construct %54
    ret %55
  }
}

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