SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # root
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 -> %b2 {
  %b2 = block {
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %indexable:ptr<function, array<i32, 4>, read_write> = var
    %8:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_72:i32 = load %8
    store %a, %x_72
    %10:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_74:i32 = load %10
    store %i, %x_74
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_79:i32 = load %i
        %13:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %x_81:i32 = load %13
        %15:bool = lt %x_79, %x_81
        if %15 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %16:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %x_85:i32 = load %16
        %18:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %x_87:i32 = load %18
        %20:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %x_89:i32 = load %20
        %22:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %x_91:i32 = load %22
        %x_93:i32 = load %a
        %25:array<i32, 4> = construct %x_85, %x_87, %x_89, %x_91
        store %indexable, %25
        %26:ptr<function, i32, read_write> = access %indexable, %x_93
        %x_95:i32 = load %26
        %x_96:i32 = load %x
        %29:bool = gt %x_95, %x_96
        if %29 [t: %b7, f: %b8] {  # if_2
          %b7 = block {  # true
            if true [t: %b9, f: %b10] {  # if_3
              %b9 = block {  # true
                %30:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
                %x_105:i32 = load %30
                ret %x_105
              }
              %b10 = block {  # false
                %32:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
                %x_107:i32 = load %32
                store %a, %x_107
                exit_if  # if_3
              }
            }
            exit_if  # if_2
          }
          %b8 = block {  # false
            if true [t: %b11] {  # if_4
              %b11 = block {  # true
                %34:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
                %x_111:i32 = load %34
                ret %x_111
              }
            }
            exit_if  # if_2
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %x_112:i32 = load %i
        %37:i32 = add %x_112, 1i
        store %i, %37
        next_iteration %b3
      }
    }
    %38:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_115:i32 = load %38
    ret %x_115
  }
}
%main_1 = func():void -> %b12 {
  %b12 = block {
    %a_1:ptr<function, i32, read_write> = var
    %param:ptr<function, i32, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %44:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_39:i32 = load %44
    store %param, %x_39
    %x_40:i32 = call %func_i1_, %param
    store %a_1, %x_40
    %47:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
    %x_42:i32 = load %47
    store %param_1, %x_42
    %x_43:i32 = call %func_i1_, %param_1
    %x_44:i32 = load %a_1
    %51:i32 = add %x_44, %x_43
    store %a_1, %51
    %x_46:i32 = load %a_1
    %53:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %x_48:i32 = load %53
    %55:bool = eq %x_46, %x_48
    if %55 [t: %b13, f: %b14] {  # if_5
      %b13 = block {  # true
        %56:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %x_54:i32 = load %56
        %58:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %x_57:i32 = load %58
        %60:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %x_60:i32 = load %60
        %62:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %x_63:i32 = load %62
        %64:f32 = convert %x_54
        %65:f32 = convert %x_57
        %66:f32 = convert %x_60
        %67:f32 = convert %x_63
        %68:vec4<f32> = construct %64, %65, %66, %67
        store %x_GLF_color, %68
        exit_if  # if_5
      }
      %b14 = block {  # false
        %69:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %x_67:i32 = load %69
        %x_68:f32 = convert %x_67
        %72:vec4<f32> = construct %x_68, %x_68, %x_68, %x_68
        store %x_GLF_color, %72
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b15 {
  %b15 = block {
    %74:void = call %main_1
    %75:vec4<f32> = load %x_GLF_color
    %76:main_out = construct %75
    ret %76
  }
}

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