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
    %x_36:f32 = let %8
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %11:f32 = load %10
    %x_38:f32 = let %11
    %13:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %14:f32 = load %13
    %x_40:f32 = let %14
    %16:array<f32, 3> = construct %x_36, %x_38, %x_40
    store %arr, %16
    store %i, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %17:i32 = load %i
        %x_46:i32 = let %17
        %19:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %20:i32 = load %19
        %x_48:i32 = let %20
        %22:i32 = min %x_48, 3i
        %23:bool = lt %x_46, %22
        if %23 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %24:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %25:i32 = load %24
        %x_53:i32 = let %25
        %27:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %28:f32 = load %27
        %x_55:f32 = let %28
        %30:ptr<function, f32, read_write> = access %arr, %x_53
        %31:f32 = load %30
        %x_57:f32 = let %31
        %33:ptr<function, f32, read_write> = access %arr, %x_53
        %34:f32 = add %x_57, %x_55
        store %33, %34
        continue  # -> $B4
      }
      $B4: {  # continuing
        %35:i32 = load %i
        %x_60:i32 = let %35
        %37:i32 = add %x_60, 1i
        store %i, %37
        next_iteration  # -> $B3
      }
    }
    %38:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
    %39:i32 = load %38
    %x_63:i32 = let %39
    %41:ptr<function, f32, read_write> = access %arr, %x_63
    %42:f32 = load %41
    %x_65:f32 = let %42
    %44:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %45:f32 = load %44
    %x_67:f32 = let %45
    %47:bool = eq %x_65, %x_67
    if %47 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %48:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %49:i32 = load %48
        %x_73:i32 = let %49
        %51:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %52:i32 = load %51
        %x_76:i32 = let %52
        %54:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %55:i32 = load %54
        %x_79:i32 = let %55
        %57:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %58:i32 = load %57
        %x_82:i32 = let %58
        %60:f32 = convert %x_73
        %61:f32 = let %60
        %62:f32 = convert %x_76
        %63:f32 = let %62
        %64:f32 = convert %x_79
        %65:f32 = let %64
        %66:f32 = convert %x_82
        %67:vec4<f32> = construct %61, %63, %65, %66
        store %x_GLF_color, %67
        exit_if  # if_2
      }
      $B8: {  # false
        %68:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %69:i32 = load %68
        %x_86:i32 = let %69
        %71:f32 = convert %x_86
        %x_87:f32 = let %71
        %73:vec4<f32> = construct %x_87, %x_87, %x_87, %x_87
        store %x_GLF_color, %73
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %75:void = call %main_1
    %76:vec4<f32> = load %x_GLF_color
    %77:main_out = construct %76
    ret %77
  }
}

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