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, 5> @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, 3> @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_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %M1:ptr<function, mat2x2<f32>, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %9:f32 = load %8
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %11:f32 = load %10
    %12:vec2<f32> = construct %9, %11
    %13:vec2<f32> = let %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %15:f32 = load %14
    %16:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
    %17:f32 = load %16
    %18:vec2<f32> = construct %15, %17
    %19:mat2x2<f32> = construct %13, %18
    store %M1, %19
    %20:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %21:f32 = load %20
    store %a, %21
    %22:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %23:i32 = load %22
    store %c, %23
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %24:i32 = load %c
        %25:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %26:i32 = load %25
        %27:bool = lt %24, %26
        if %27 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %28:f32 = load %a
        %29:f32 = let %28
        %30:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %31:i32 = load %30
        %32:ptr<function, vec2<f32>, read_write> = access %M1, %31
        %33:ptr<function, vec2<f32>, read_write> = let %32
        %34:i32 = load %c
        %35:i32 = complement %34
        %36:i32 = max %35, 0i
        %37:i32 = min %36, 1i
        %38:f32 = load_vector_element %33, %37
        %39:f32 = add %29, %38
        store %a, %39
        continue  # -> $B4
      }
      $B4: {  # continuing
        %40:i32 = load %c
        %41:i32 = add %40, 1i
        store %c, %41
        next_iteration  # -> $B3
      }
    }
    %42:f32 = load %a
    %43:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %44:f32 = load %43
    %45:bool = eq %42, %44
    if %45 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %46:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %47:i32 = load %46
        %48:f32 = convert %47
        %49:f32 = let %48
        %50:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %51:i32 = load %50
        %52:f32 = convert %51
        %53:f32 = let %52
        %54:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %55:i32 = load %54
        %56:f32 = convert %55
        %57:f32 = let %56
        %58:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %59:i32 = load %58
        %60:f32 = convert %59
        %61:vec4<f32> = construct %49, %53, %57, %60
        store %x_GLF_color, %61
        exit_if  # if_2
      }
      $B8: {  # false
        %62:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %63:i32 = load %62
        %64:f32 = convert %63
        %65:vec4<f32> = construct %64
        store %x_GLF_color, %65
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %67:void = call %main_1
    %68:vec4<f32> = load %x_GLF_color
    %69:main_out = construct %68
    ret %69
  }
}

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