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: {
    %i:ptr<function, i32, read_write> = var
    %A:ptr<function, array<i32, 4>, read_write> = var
    %x_77:ptr<function, bool, read_write> = var
    %x_87:ptr<function, bool, read_write> = var
    %x_97:ptr<function, bool, read_write> = var
    %x_78_phi:ptr<function, bool, read_write> = var
    %x_88_phi:ptr<function, bool, read_write> = var
    %x_98_phi:ptr<function, bool, read_write> = var
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %13:i32 = load %12
    %x_33:i32 = let %13
    store %i, %x_33
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %15:i32 = load %i
        %x_38:i32 = let %15
        %17:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %18:i32 = load %17
        %x_40:i32 = let %18
        %20:bool = lt %x_38, %x_40
        if %20 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %21:i32 = load %i
        %x_43:i32 = let %21
        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %24:i32 = load %23
        %x_45:i32 = let %24
        %26:ptr<function, i32, read_write> = access %A, %x_43
        store %26, %x_45
        %27:i32 = load %i
        %x_47:i32 = let %27
        %29:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %30:i32 = load %29
        %x_50:i32 = let %30
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %33:i32 = load %32
        %x_54:i32 = let %33
        %35:i32 = mul 2i, %x_47
        %36:i32 = mul 2i, %x_50
        %37:i32 = max %35, %36
        %38:bool = eq %37, %x_54
        if %38 [t: $B7] {  # if_2
          $B7: {  # true
            %39:i32 = load %i
            %x_58:i32 = let %39
            %41:ptr<function, i32, read_write> = access %A, %x_58
            store %41, 1i
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %42:i32 = load %i
        %x_60:i32 = let %42
        %44:i32 = add %x_60, 1i
        store %i, %44
        next_iteration  # -> $B3
      }
    }
    %45:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %46:i32 = load %45
    %x_63:i32 = let %46
    %48:ptr<function, i32, read_write> = access %A, %x_63
    %49:i32 = load %48
    %x_65:i32 = let %49
    %51:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %52:i32 = load %51
    %x_67:i32 = let %52
    %54:bool = eq %x_65, %x_67
    %x_68:bool = let %54
    store %x_78_phi, %x_68
    if %x_68 [t: $B8] {  # if_3
      $B8: {  # true
        %56:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %57:i32 = load %56
        %x_72:i32 = let %57
        %59:ptr<function, i32, read_write> = access %A, %x_72
        %60:i32 = load %59
        %x_74:i32 = let %60
        %62:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %63:i32 = load %62
        %x_76:i32 = let %63
        %65:bool = eq %x_74, %x_76
        store %x_77, %65
        %66:bool = load %x_77
        store %x_78_phi, %66
        exit_if  # if_3
      }
    }
    %67:bool = load %x_78_phi
    %x_78:bool = let %67
    store %x_88_phi, %x_78
    if %x_78 [t: $B9] {  # if_4
      $B9: {  # true
        %69:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %70:i32 = load %69
        %x_82:i32 = let %70
        %72:ptr<function, i32, read_write> = access %A, %x_82
        %73:i32 = load %72
        %x_84:i32 = let %73
        %75:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %76:i32 = load %75
        %x_86:i32 = let %76
        %78:bool = eq %x_84, %x_86
        store %x_87, %78
        %79:bool = load %x_87
        store %x_88_phi, %79
        exit_if  # if_4
      }
    }
    %80:bool = load %x_88_phi
    %x_88:bool = let %80
    store %x_98_phi, %x_88
    if %x_88 [t: $B10] {  # if_5
      $B10: {  # true
        %82:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %83:i32 = load %82
        %x_92:i32 = let %83
        %85:ptr<function, i32, read_write> = access %A, %x_92
        %86:i32 = load %85
        %x_94:i32 = let %86
        %88:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %89:i32 = load %88
        %x_96:i32 = let %89
        %91:bool = eq %x_94, %x_96
        store %x_97, %91
        %92:bool = load %x_97
        store %x_98_phi, %92
        exit_if  # if_5
      }
    }
    %93:bool = load %x_98_phi
    %x_98:bool = let %93
    if %x_98 [t: $B11, f: $B12] {  # if_6
      $B11: {  # true
        %95:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %96:i32 = load %95
        %x_103:i32 = let %96
        %98:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %99:i32 = load %98
        %x_106:i32 = let %99
        %101:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %102:i32 = load %101
        %x_109:i32 = let %102
        %104:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %105:i32 = load %104
        %x_112:i32 = let %105
        %107:f32 = convert %x_103
        %108:f32 = let %107
        %109:f32 = convert %x_106
        %110:f32 = let %109
        %111:f32 = convert %x_109
        %112:f32 = let %111
        %113:f32 = convert %x_112
        %114:vec4<f32> = construct %108, %110, %112, %113
        store %x_GLF_color, %114
        exit_if  # if_6
      }
      $B12: {  # false
        store %x_GLF_color, vec4<f32>(1.0f)
        exit_if  # if_6
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %116:void = call %main_1
    %117:vec4<f32> = load %x_GLF_color
    %118:main_out = construct %117
    ret %118
  }
}

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