https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90276
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> --- __pstl::__tbb_backend::__merge_func::split_merging (which should be a reserved name) does: if (__nx < __ny) { __ym = _M_ys + __ny / 2; if (_x_orig) __xm = std::upper_bound(_M_x_beg + _M_xs, _M_x_beg + _M_xe, *(_M_x_beg + __ym), _M_comp) - _M_x_beg; else __xm = std::upper_bound(_M_z_beg + _M_xs, _M_z_beg + _M_xe, *(_M_z_beg + __ym), _M_comp) - _M_z_beg; } which aborts because the range is not correctly sorted w.r.t _M_comp, as required by upper_bound. The range looks like this: $1 = std::__cxx1998::vector of length 1284, capacity 1284 = {{val = 0}, {val = 5290}, {val = 9862}, {val = 8699}, {val = 5471}, {val = 4810}, { val = 6176}, {val = 1400}, {val = 5025}, {val = 3246}, {val = 2547}, {val = 8814}, {val = 2463}, {val = 8800}, {val = 3074}, {val = 5741}, { val = 5234}, {val = 736}, {val = 4895}, {val = 6803}, {val = 2363}, {val = 5351}, {val = 6719}, {val = 7967}, {val = 732}, {val = 1399}, {val = 7586}, {val = 4659}, {val = 3800}, {val = 6956}, {val = 4087}, {val = 9090}, {val = 2293}, {val = 8702}, {val = 2263}, {val = 7765}, {val = 3233}, { val = 8440}, {val = 3918}, {val = 8259}, {val = 6439}, {val = 6465}, {val = 6794}, {val = 3656}, {val = 10018}, {val = 4621}, {val = 9397}, { val = 4973}, {val = 584}, {val = 9046}, {val = 6530}, {val = 2474}, {val = 4118}, {val = 2970}, {val = 162}, {val = 4850}, {val = 9401}, {val = 7748}, {val = 9509}, {val = 2923}, {val = 4425}, {val = 8349}, {val = 6766}, {val = 6719}, {val = 6773}, {val = 3783}, {val = 4205}, {val = 4759}, { val = 6976}, {val = 8123}, {val = 2739}, {val = 3136}, {val = 4309}, {val = 4286}, {val = 6792}, {val = 4048}, {val = 8908}, {val = 664}, { val = 3774}, {val = 9019}, {val = 9710}, {val = 111}, {val = 1214}, {val = 8581}, {val = 2996}, {val = 6409}, {val = 3152}, {val = 7150}, { val = 3878}, {val = 7415}, {val = 10073}, {val = 3057}, {val = 238}, {val = 1314}, {val = 9776}, {val = 7011}, {val = 5097}, {val = 8734}, { val = 6524}, {val = 1794}, {val = 6578}, {val = 9263}, {val = 9962}, {val = 5640}, {val = 3271}, {val = 1229}, {val = 4441}, {val = 6932}, { val = 1893}, {val = 2968}, {val = 425}, {val = 6356}, {val = 2994}, {val = 6671}, {val = 4658}, {val = 743}, {val = 2801}, {val = 2563}, {val = 7893}, {val = 1433}, {val = 4731}, {val = 2441}, {val = 4490}, {val = 4970}, {val = 8787}, {val = 3987}, {val = 6734}, {val = 3605}, {val = 7474}, { val = 2979}, {val = 152}, {val = 8805}, {val = 1964}, {val = 10114}, {val = 4166}, {val = 10267}, {val = 6096}, {val = 3360}, {val = 1673}, { val = 2742}, {val = 6328}, {val = 7130}, {val = 9098}, {val = 4075}, {val = 8554}, {val = 8509}, {val = 9850}, {val = 1077}, {val = 794}, { val = 7465}, {val = 2510}, {val = 5525}, {val = 4659}, {val = 1753}, {val = 216}, {val = 3167}, {val = 493}, {val = 1704}, {val = 1525}, {val = 7967}, {val = 4683}, {val = 6709}, {val = 6493}, {val = 1400}, {val = 1297}, {val = 5412}, {val = 6420}, {val = 7394}, {val = 8772}, {val = 2846}, { val = 10136}, {val = 9853}, {val = 9976}, {val = 3709}, {val = 8682}, {val = 8252}, {val = 1939}, {val = 8253}, {val = 4082}, {val = 7765}, { val = 5439}, {val = 1345}, {val = 3012}, {val = 4851}, {val = 3098}, {val = 8260}, {val = 2771}, {val = 3591}, {val = 4717}, {val = 9328}, { val = 1279}, {val = 9401}, {val = 5758}, {val = 2525}, {val = 5554}, {val = 1809}, {val = 7937}, {val = 1696}, {val = 9203}, {val = 1183}...} This is indeed not partitioned: (gdb) p __val $2 = (const Num<float> &) @0x7ffff7994e28: {val = 687} (gdb) p __first[46] $4 = (Num<float> &) @0x7ffff79930c8: {val = 9397} (gdb) p __first[47] $5 = (Num<float> &) @0x7ffff79930cc: {val = 4973} (gdb) p __first[48] $6 = (Num<float> &) @0x7ffff79930d0: {val = 584} <-------- (gdb) p __first[49] $7 = (Num<float> &) @0x7ffff79930d4: {val = 9046} I think this needs to be reported upstream too.