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, 5> @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_76:ptr<function, bool, read_write> = var
    %x_83:ptr<function, bool, read_write> = var
    %x_77_phi:ptr<function, bool, read_write> = var
    %x_84_phi:ptr<function, bool, read_write> = var
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %12:i32 = load %11
    %x_31:i32 = let %12
    store %a, %x_31
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %15:i32 = load %14
    %x_33:i32 = let %15
    store %b, %x_33
    store %c, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %17:i32 = load %b
        %x_38:i32 = let %17
        %19:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %20:i32 = load %19
        %x_40:i32 = let %20
        %22:i32 = load %a
        %x_42:i32 = let %22
        %24:bool = lt %x_38, %x_40
        %25:bool = lt %x_42, 10i
        %26:bool = and %24, %25
        if %26 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %27:i32 = load %c
        %x_46:i32 = let %27
        %29:bool = gt %x_46, 5i
        if %29 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        %30:i32 = load %a
        %x_50:i32 = let %30
        %32:i32 = add %x_50, 1i
        store %a, %32
        %33:i32 = load %c
        %x_52:i32 = let %33
        %35:i32 = add %x_52, 1i
        store %c, %35
        %36:i32 = load %b
        %x_54:i32 = let %36
        %38:i32 = add %x_54, 1i
        store %b, %38
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    loop [b: $B8, c: $B9] {  # loop_2
      $B8: {  # body
        %39:i32 = load %a
        %x_60:i32 = let %39
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %42:i32 = load %41
        %x_62:i32 = let %42
        %44:bool = lt %x_60, %x_62
        if %44 [t: $B10, f: $B11] {  # if_3
          $B10: {  # true
            exit_if  # if_3
          }
          $B11: {  # false
            exit_loop  # loop_2
          }
        }
        continue  # -> $B9
      }
      $B9: {  # continuing
        %45:i32 = load %a
        %x_65:i32 = let %45
        %47:i32 = add %x_65, 1i
        store %a, %47
        next_iteration  # -> $B8
      }
    }
    %48:i32 = load %a
    %x_67:i32 = let %48
    %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %51:i32 = load %50
    %x_69:i32 = let %51
    %53:bool = eq %x_67, %x_69
    %x_70:bool = let %53
    store %x_77_phi, %x_70
    if %x_70 [t: $B12] {  # if_4
      $B12: {  # true
        %55:i32 = load %b
        %x_73:i32 = let %55
        %57:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %58:i32 = load %57
        %x_75:i32 = let %58
        %60:bool = eq %x_73, %x_75
        store %x_76, %60
        %61:bool = load %x_76
        store %x_77_phi, %61
        exit_if  # if_4
      }
    }
    %62:bool = load %x_77_phi
    %x_77:bool = let %62
    store %x_84_phi, %x_77
    if %x_77 [t: $B13] {  # if_5
      $B13: {  # true
        %64:i32 = load %c
        %x_80:i32 = let %64
        %66:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %67:i32 = load %66
        %x_82:i32 = let %67
        %69:bool = eq %x_80, %x_82
        store %x_83, %69
        %70:bool = load %x_83
        store %x_84_phi, %70
        exit_if  # if_5
      }
    }
    %71:bool = load %x_84_phi
    %x_84:bool = let %71
    if %x_84 [t: $B14, f: $B15] {  # if_6
      $B14: {  # true
        %73:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %74:i32 = load %73
        %x_89:i32 = let %74
        %76:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %77:i32 = load %76
        %x_92:i32 = let %77
        %79:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %80:i32 = load %79
        %x_95:i32 = let %80
        %82:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %83:i32 = load %82
        %x_98:i32 = let %83
        %85:f32 = convert %x_89
        %86:f32 = let %85
        %87:f32 = convert %x_92
        %88:f32 = let %87
        %89:f32 = convert %x_95
        %90:f32 = let %89
        %91:f32 = convert %x_98
        %92:vec4<f32> = construct %86, %88, %90, %91
        store %x_GLF_color, %92
        exit_if  # if_6
      }
      $B15: {  # false
        %93:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %94:i32 = load %93
        %x_102:i32 = let %94
        %96:f32 = convert %x_102
        %x_103:f32 = let %96
        %98:vec4<f32> = construct %x_103, %x_103, %x_103, %x_103
        store %x_GLF_color, %98
        exit_if  # if_6
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B16: {
    %100:void = call %main_1
    %101:vec4<f32> = load %x_GLF_color
    %102:main_out = construct %101
    ret %102
  }
}

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