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_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 {
  %b2 = block {
    %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
    %x_31:i32 = load %11
    store %a, %x_31
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %x_33:i32 = load %13
    store %b, %x_33
    store %c, 1i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_38:i32 = load %b
        %16:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %x_40:i32 = load %16
        %x_42:i32 = load %a
        %19:bool = lt %x_38, %x_40
        %20:bool = lt %x_42, 10i
        %21:bool = and %19, %20
        if %21 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_46:i32 = load %c
        %23:bool = gt %x_46, 5i
        if %23 [t: %b7] {  # if_2
          %b7 = block {  # true
            exit_loop  # loop_1
          }
        }
        %x_50:i32 = load %a
        %25:i32 = add %x_50, 1i
        store %a, %25
        %x_52:i32 = load %c
        %27:i32 = add %x_52, 1i
        store %c, %27
        %x_54:i32 = load %b
        %29:i32 = add %x_54, 1i
        store %b, %29
        continue %b4
      }
      %b4 = block {  # continuing
        next_iteration %b3
      }
    }
    loop [b: %b8, c: %b9] {  # loop_2
      %b8 = block {  # body
        %x_60:i32 = load %a
        %31:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_62:i32 = load %31
        %33:bool = lt %x_60, %x_62
        if %33 [t: %b10, f: %b11] {  # if_3
          %b10 = block {  # true
            exit_if  # if_3
          }
          %b11 = block {  # false
            exit_loop  # loop_2
          }
        }
        continue %b9
      }
      %b9 = block {  # continuing
        %x_65:i32 = load %a
        %35:i32 = add %x_65, 1i
        store %a, %35
        next_iteration %b8
      }
    }
    %x_67:i32 = load %a
    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_69:i32 = load %37
    %x_70:bool = eq %x_67, %x_69
    store %x_77_phi, %x_70
    if %x_70 [t: %b12] {  # if_4
      %b12 = block {  # true
        %x_73:i32 = load %b
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %x_75:i32 = load %41
        %43:bool = eq %x_73, %x_75
        store %x_76, %43
        %44:bool = load %x_76
        store %x_77_phi, %44
        exit_if  # if_4
      }
    }
    %x_77:bool = load %x_77_phi
    store %x_84_phi, %x_77
    if %x_77 [t: %b13] {  # if_5
      %b13 = block {  # true
        %x_80:i32 = load %c
        %47:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %x_82:i32 = load %47
        %49:bool = eq %x_80, %x_82
        store %x_83, %49
        %50:bool = load %x_83
        store %x_84_phi, %50
        exit_if  # if_5
      }
    }
    %x_84:bool = load %x_84_phi
    if %x_84 [t: %b14, f: %b15] {  # if_6
      %b14 = block {  # true
        %52:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %x_89:i32 = load %52
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_92:i32 = load %54
        %56:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_95:i32 = load %56
        %58:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %x_98:i32 = load %58
        %60:f32 = convert %x_89
        %61:f32 = convert %x_92
        %62:f32 = convert %x_95
        %63:f32 = convert %x_98
        %64:vec4<f32> = construct %60, %61, %62, %63
        store %x_GLF_color, %64
        exit_if  # if_6
      }
      %b15 = block {  # false
        %65:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_102:i32 = load %65
        %x_103:f32 = convert %x_102
        %68:vec4<f32> = construct %x_103, %x_103, %x_103, %x_103
        store %x_GLF_color, %68
        exit_if  # if_6
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b16 {
  %b16 = block {
    %70:void = call %main_1
    %71:vec4<f32> = load %x_GLF_color
    %72:main_out = construct %71
    ret %72
  }
}

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