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

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

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