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

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

%b1 = block {  # root
  %x_5: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 {
    %x_23:ptr<function, i32, read_write> = var
    %x_27:ptr<function, i32, read_write> = var
    %x_37:ptr<function, i32, read_write> = var
    %x_45:ptr<function, i32, read_write> = var
    store %x_23, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_24:ptr<function, i32, read_write> = var
        %9:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %10:i32 = load %9
        store %x_27, %10
        %11:i32 = load %x_23
        %12:i32 = load %x_27
        %13:i32 = sub 100i, %12
        %14:bool = lt %11, %13
        if %14 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %15:i32 = load %x_23
        %16:i32 = add %15, 1i
        store %x_24, %16
        %17:i32 = load %x_24
        store %x_23, %17
        next_iteration %b3
      }
    }
    %x_40:ptr<function, i32, read_write> = var
    %19:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %x_32:i32 = load %19
    store %x_45, 1i
    %21:bool = eq %x_32, 0i
    if %21 [t: %b7] {  # if_2
      %b7 = block {  # true
        store %x_37, 1i
        %22:i32 = load %x_23
        store %x_40, %22
        loop [b: %b8, c: %b9] {  # loop_2
          %b8 = block {  # body
            %x_41:ptr<function, i32, read_write> = var
            %x_38:ptr<function, i32, read_write> = var
            %25:i32 = load %x_40
            %26:bool = lt %25, 100i
            if %26 [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
            %27:i32 = load %x_40
            %28:i32 = add %27, 1i
            store %x_41, %28
            %29:i32 = load %x_37
            %30:i32 = load %x_37
            %31:i32 = sub 1i, %30
            %32:i32 = mul %29, %31
            store %x_38, %32
            %33:i32 = load %x_38
            store %x_37, %33
            %34:i32 = load %x_41
            store %x_40, %34
            next_iteration %b8
          }
        }
        %35:i32 = load %x_37
        store %x_45, %35
        exit_if  # if_2
      }
    }
    %36:i32 = load %x_45
    %37:bool = eq %36, %x_32
    if %37 [t: %b12, f: %b13] {  # if_4
      %b12 = block {  # true
        %38:i32 = load %x_27
        %x_50:f32 = convert %38
        %x_51:f32 = convert %x_32
        %41:vec4<f32> = construct %x_50, %x_51, %x_51, %x_50
        store %x_GLF_color, %41
        exit_if  # if_4
      }
      %b13 = block {  # false
        %42:f32 = convert %x_32
        %43:vec4<f32> = construct %42
        store %x_GLF_color, %43
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b14 {
  %b14 = block {
    %45:void = call %main_1
    %46:vec4<f32> = load %x_GLF_color
    %47:main_out = construct %46
    ret %47
  }
}

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