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_23_phi:ptr<function, i32, read_write> = var
    %x_45_phi:ptr<function, i32, read_write> = var
    store %x_23_phi, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_24:ptr<function, i32, read_write> = var
        %10:i32 = load %x_23_phi
        store %x_23, %10
        %11:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %12:i32 = load %11
        store %x_27, %12
        %13:i32 = load %x_23
        %14:i32 = load %x_27
        %15:i32 = bitcast %14
        %16:i32 = sub 100i, %15
        %17:bool = lt %13, %16
        if %17 [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
        %18:i32 = load %x_23
        %19:i32 = add %18, 1i
        %20:i32 = bitcast %19
        store %x_24, %20
        %21:i32 = load %x_24
        store %x_23_phi, %21
        next_iteration %b3
      }
    }
    %x_37_phi:ptr<function, i32, read_write> = var
    %x_40_phi:ptr<function, i32, read_write> = var
    %24:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %x_32:i32 = load %24
    store %x_45_phi, 1i
    %26:bool = eq %x_32, 0i
    if %26 [t: %b7] {  # if_2
      %b7 = block {  # true
        store %x_37_phi, 1i
        %27:i32 = load %x_23
        store %x_40_phi, %27
        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
            %30:i32 = load %x_37_phi
            store %x_37, %30
            %x_40:i32 = load %x_40_phi
            %32:bool = lt %x_40, 100i
            if %32 [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
            %33:i32 = add %x_40, 1i
            store %x_41, %33
            %34:i32 = load %x_37
            %35:i32 = load %x_37
            %36:i32 = bitcast %35
            %37:i32 = sub 1i, %36
            %38:i32 = bitcast %37
            %39:i32 = mul %34, %38
            %40:i32 = bitcast %39
            store %x_38, %40
            %41:i32 = load %x_38
            store %x_37_phi, %41
            %42:i32 = load %x_41
            store %x_40_phi, %42
            next_iteration %b8
          }
        }
        %43:i32 = load %x_37
        store %x_45_phi, %43
        exit_if  # if_2
      }
    }
    %x_45:i32 = load %x_45_phi
    %45:bool = eq %x_45, %x_32
    if %45 [t: %b12, f: %b13] {  # if_4
      %b12 = block {  # true
        %46:i32 = load %x_27
        %x_50:f32 = convert %46
        %x_51:f32 = convert %x_32
        %49:vec4<f32> = construct %x_50, %x_51, %x_51, %x_50
        store %x_GLF_color, %49
        exit_if  # if_4
      }
      %b13 = block {  # false
        %x_53:f32 = convert %x_32
        %51:vec4<f32> = construct %x_53, %x_53, %x_53, %x_53
        store %x_GLF_color, %51
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b14 {
  %b14 = block {
    %53:void = call %main_1
    %54:vec4<f32> = load %x_GLF_color
    %55:main_out = construct %54
    ret %55
  }
}

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