SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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)
}

S = struct @align(4) {
  data:i32 @offset(0)
}

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

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

%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):void {
  $B2: {
    %6:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %7:i32 = load %6
    %8:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %9:i32 = load %8
    %10:bool = eq %7, %9
    if %10 [t: $B3] {  # if_1
      $B3: {  # true
        ret
      }
    }
    %11:ptr<function, i32, read_write> = access %s, 0u
    %12:i32 = load %x
    store %11, %12
    ret
  }
}
%main_1 = func():void {
  $B4: {
    %i:ptr<function, i32, read_write> = var
    %arr:ptr<function, array<S, 10>, read_write> = var
    %index:ptr<function, i32, read_write> = var
    %param:ptr<function, S, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %param_2:ptr<function, S, read_write> = var
    %param_3:ptr<function, i32, read_write> = var
    store %i, 0i
    loop [b: $B5, c: $B6] {  # loop_1
      $B5: {  # body
        %21:i32 = load %i
        %22:bool = lt %21, 10i
        if %22 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            exit_if  # if_2
          }
          $B8: {  # false
            exit_loop  # loop_1
          }
        }
        %23:i32 = load %i
        %x_46:i32 = let %23
        %25:ptr<function, i32, read_write> = access %arr, %x_46, 0u
        store %25, 0i
        continue  # -> $B6
      }
      $B6: {  # continuing
        %26:i32 = load %i
        %27:i32 = add %26, 1i
        store %i, %27
        next_iteration  # -> $B5
      }
    }
    %28:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %29:i32 = load %28
    %30:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %31:i32 = load %30
    %32:bool = eq %29, %31
    if %32 [t: $B9, f: $B10] {  # if_3
      $B9: {  # true
        %33:i32 = load %index
        %x_58:i32 = let %33
        %35:i32 = load %index
        %36:ptr<function, S, read_write> = access %arr, %35
        %37:S = load %36
        store %param, %37
        %38:i32 = load %index
        store %param_1, %38
        %39:void = call %func_struct_S_i11_i1_, %param, %param_1
        %40:ptr<function, S, read_write> = access %arr, %x_58
        %41:S = load %param
        store %40, %41
        exit_if  # if_3
      }
      $B10: {  # false
        %42:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %43:i32 = load %42
        %x_66:i32 = let %43
        %45:ptr<function, S, read_write> = access %arr, %x_66
        %46:S = load %45
        store %param_2, %46
        %47:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %48:i32 = load %47
        store %param_3, %48
        %49:void = call %func_struct_S_i11_i1_, %param_2, %param_3
        %50:ptr<function, S, read_write> = access %arr, %x_66
        %51:S = load %param_2
        store %50, %51
        exit_if  # if_3
      }
    }
    %52:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %53:i32 = load %52
    %54:ptr<function, i32, read_write> = access %arr, %53, 0u
    %55:i32 = load %54
    %56:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %57:i32 = load %56
    %58:bool = eq %55, %57
    if %58 [t: $B11, f: $B12] {  # if_4
      $B11: {  # true
        %59:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %60:i32 = load %59
        %61:f32 = convert %60
        %62:f32 = let %61
        %63:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %64:i32 = load %63
        %65:f32 = convert %64
        %66:f32 = let %65
        %67:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %68:i32 = load %67
        %69:f32 = convert %68
        %70:f32 = let %69
        %71:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %72:i32 = load %71
        %73:f32 = convert %72
        %74:vec4<f32> = construct %62, %66, %70, %73
        store %x_GLF_color, %74
        exit_if  # if_4
      }
      $B12: {  # false
        %75:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %76:i32 = load %75
        %77:f32 = convert %76
        %78:vec4<f32> = construct %77
        store %x_GLF_color, %78
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %80:void = call %main_1
    %81:vec4<f32> = load %x_GLF_color
    %82:main_out = construct %81
    ret %82
  }
}

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