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, 4> @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_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
    %x_29:i32 = load %9
    store %a, %x_29
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_31:i32 = load %11
    store %b, %x_31
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %x_33:i32 = load %13
    store %c, %x_33
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_38:i32 = load %a
        %x_39:i32 = load %b
        %17:bool = lt %x_38, %x_39
        if %17 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_42:i32 = load %a
        %19:i32 = add %x_42, 1i
        store %a, %19
        %x_44:i32 = load %c
        %21:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %x_46:i32 = load %21
        %23:bool = eq %x_44, %x_46
        if %23 [t: %b7, f: %b8] {  # if_2
          %b7 = block {  # true
            %24:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
            %x_52:i32 = load %24
            %x_53:i32 = load %c
            %27:i32 = mul %x_53, %x_52
            store %c, %27
            exit_if  # if_2
          }
          %b8 = block {  # false
            if true [t: %b9] {  # if_3
              %b9 = block {  # true
                continue %b4
              }
            }
            exit_if  # if_2
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        next_iteration %b3
      }
    }
    %x_57:i32 = load %a
    %x_58:i32 = load %b
    %x_59:bool = eq %x_57, %x_58
    store %x_66_phi, %x_59
    if %x_59 [t: %b10] {  # if_4
      %b10 = block {  # true
        %x_62:i32 = load %c
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %x_64:i32 = load %32
        %34:bool = eq %x_62, %x_64
        store %x_65, %34
        %35:bool = load %x_65
        store %x_66_phi, %35
        exit_if  # if_4
      }
    }
    %x_66:bool = load %x_66_phi
    if %x_66 [t: %b11, f: %b12] {  # if_5
      %b11 = block {  # true
        %37:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %x_71:i32 = load %37
        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_74:i32 = load %39
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_77:i32 = load %41
        %43:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %x_80:i32 = load %43
        %45:f32 = convert %x_71
        %46:f32 = convert %x_74
        %47:f32 = convert %x_77
        %48:f32 = convert %x_80
        %49:vec4<f32> = construct %45, %46, %47, %48
        store %x_GLF_color, %49
        exit_if  # if_5
      }
      %b12 = block {  # false
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_84:i32 = load %50
        %x_85:f32 = convert %x_84
        %53:vec4<f32> = construct %x_85, %x_85, %x_85, %x_85
        store %x_GLF_color, %53
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b13 {
  %b13 = block {
    %55:void = call %main_1
    %56:vec4<f32> = load %x_GLF_color
    %57:main_out = construct %56
    ret %57
  }
}

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