SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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
    %x_41:f32 = load %8
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %x_43:f32 = load %10
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %x_45:f32 = load %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
    %x_47:f32 = load %14
    %16:vec2<f32> = construct %x_41, %x_43
    %17:vec2<f32> = construct %x_45, %x_47
    %18:mat2x2<f32> = construct %16, %17
    store %M1, %18
    %19:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %x_52:f32 = load %19
    store %a, %x_52
    %21:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_54:i32 = load %21
    store %c, %x_54
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_59:i32 = load %c
        %24:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_61:i32 = load %24
        %26:bool = lt %x_59, %x_61
        if %26 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %27:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_65:i32 = load %27
        %x_66:i32 = load %c
        %30:ptr<function, vec2<f32>, read_write> = access %M1, %x_65
        %31:i32 = complement %x_66
        %32:i32 = clamp %31, 0i, 1i
        %x_70:f32 = load_vector_element %30, %32
        %x_71:f32 = load %a
        %35:f32 = add %x_71, %x_70
        store %a, %35
        continue %b4
      }
      %b4 = block {  # continuing
        %x_73:i32 = load %c
        %37:i32 = add %x_73, 1i
        store %c, %37
        next_iteration %b3
      }
    }
    %x_75:f32 = load %a
    %39:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_77:f32 = load %39
    %41:bool = eq %x_75, %x_77
    if %41 [t: %b7, f: %b8] {  # if_2
      %b7 = block {  # true
        %42:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_83:i32 = load %42
        %44:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_86:i32 = load %44
        %46:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_89:i32 = load %46
        %48:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_92:i32 = load %48
        %50:f32 = convert %x_83
        %51:f32 = convert %x_86
        %52:f32 = convert %x_89
        %53:f32 = convert %x_92
        %54:vec4<f32> = construct %50, %51, %52, %53
        store %x_GLF_color, %54
        exit_if  # if_2
      }
      %b8 = block {  # false
        %55:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_96:i32 = load %55
        %x_97:f32 = convert %x_96
        %58:vec4<f32> = construct %x_97, %x_97, %x_97, %x_97
        store %x_GLF_color, %58
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b9 {
  %b9 = block {
    %60:void = call %main_1
    %61:vec4<f32> = load %x_GLF_color
    %62:main_out = construct %61
    ret %62
  }
}

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