SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:i32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 4> @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: {
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %x_65:ptr<function, bool, read_write> = var
    %x_66_phi:ptr<function, bool, read_write> = var
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %10:i32 = load %9
    %x_29:i32 = let %10
    store %a, %x_29
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %13:i32 = load %12
    %x_31:i32 = let %13
    store %b, %x_31
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %16:i32 = load %15
    %x_33:i32 = let %16
    store %c, %x_33
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %18:i32 = load %a
        %x_38:i32 = let %18
        %20:i32 = load %b
        %x_39:i32 = let %20
        %22:bool = lt %x_38, %x_39
        if %22 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %23:i32 = load %a
        %x_42:i32 = let %23
        %25:i32 = add %x_42, 1i
        store %a, %25
        %26:i32 = load %c
        %x_44:i32 = let %26
        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %29:i32 = load %28
        %x_46:i32 = let %29
        %31:bool = eq %x_44, %x_46
        if %31 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
            %33:i32 = load %32
            %x_52:i32 = let %33
            %35:i32 = load %c
            %x_53:i32 = let %35
            %37:i32 = mul %x_53, %x_52
            store %c, %37
            exit_if  # if_2
          }
          $B8: {  # false
            if true [t: $B9] {  # if_3
              $B9: {  # true
                continue  # -> $B4
              }
            }
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    %38:i32 = load %a
    %x_57:i32 = let %38
    %40:i32 = load %b
    %x_58:i32 = let %40
    %42:bool = eq %x_57, %x_58
    %x_59:bool = let %42
    store %x_66_phi, %x_59
    if %x_59 [t: $B10] {  # if_4
      $B10: {  # true
        %44:i32 = load %c
        %x_62:i32 = let %44
        %46:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %47:i32 = load %46
        %x_64:i32 = let %47
        %49:bool = eq %x_62, %x_64
        store %x_65, %49
        %50:bool = load %x_65
        store %x_66_phi, %50
        exit_if  # if_4
      }
    }
    %51:bool = load %x_66_phi
    %x_66:bool = let %51
    if %x_66 [t: $B11, f: $B12] {  # if_5
      $B11: {  # true
        %53:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %54:i32 = load %53
        %x_71:i32 = let %54
        %56:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %57:i32 = load %56
        %x_74:i32 = let %57
        %59:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %60:i32 = load %59
        %x_77:i32 = let %60
        %62:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %63:i32 = load %62
        %x_80:i32 = let %63
        %65:f32 = convert %x_71
        %66:f32 = let %65
        %67:f32 = convert %x_74
        %68:f32 = let %67
        %69:f32 = convert %x_77
        %70:f32 = let %69
        %71:f32 = convert %x_80
        %72:vec4<f32> = construct %66, %68, %70, %71
        store %x_GLF_color, %72
        exit_if  # if_5
      }
      $B12: {  # false
        %73:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %74:i32 = load %73
        %x_84:i32 = let %74
        %76:f32 = convert %x_84
        %x_85:f32 = let %76
        %78:vec4<f32> = construct %x_85, %x_85, %x_85, %x_85
        store %x_GLF_color, %78
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %80:void = call %main_1
    %81:vec4<f32> = load %x_GLF_color
    %82:main_out = construct %81
    ret %82
  }
}

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