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, 3> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # root
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%func_ = func():i32 -> %b2 {
  %b2 = block {
    %i:ptr<function, i32, read_write> = var
    %5:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %x_53:i32 = load %5
    store %i, %x_53
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_58:i32 = load %i
        %8:i32 = add %x_58, 1i
        store %i, %8
        if true [t: %b5] {  # if_1
          %b5 = block {  # true
            if true [t: %b6] {  # if_2
              %b6 = block {  # true
                %9:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
                %x_65:i32 = load %9
                ret %x_65
              }
            }
            exit_if  # if_1
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %x_66:i32 = load %i
        %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %x_68:i32 = load %12
        %14:bool = lt %x_66, %x_68
        %15:bool = eq %14, false
        break_if %15 %b3
      }
    }
    %16:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %x_71:i32 = load %16
    ret %x_71
  }
}
%main_1 = func():void -> %b7 {
  %b7 = block {
    %x_27:i32 = call %func_
    %20:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %x_29:i32 = load %20
    %22:bool = eq %x_27, %x_29
    if %22 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %23:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %x_35:i32 = load %23
        %25:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %x_38:i32 = load %25
        %27:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %x_41:i32 = load %27
        %29:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %x_44:i32 = load %29
        %31:f32 = convert %x_35
        %32:f32 = convert %x_38
        %33:f32 = convert %x_41
        %34:f32 = convert %x_44
        %35:vec4<f32> = construct %31, %32, %33, %34
        store %x_GLF_color, %35
        exit_if  # if_3
      }
      %b9 = block {  # false
        %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %x_48:i32 = load %36
        %x_49:f32 = convert %x_48
        %39:vec4<f32> = construct %x_49, %x_49, %x_49, %x_49
        store %x_GLF_color, %39
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %41:void = call %main_1
    %42:vec4<f32> = load %x_GLF_color
    %43:main_out = construct %42
    ret %43
  }
}

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