<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/108618>108618</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
#73662 introduces a strict weak ordering violation in a comparator
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
nikic
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
alexfh
</td>
</tr>
</table>
<pre>
https://github.com/llvm/llvm-project/pull/73662 / d77067d08a3f56dc2d0e6c95bd2852c943df743a introduces an assertion failure when Clang is compiled with the strict weak ordering check for comparators enabled in libc++ check (`-D_LIBCPP_DEBUG_STRICT_WEAK_ORDERING_CHECK`):
```
$ clang -O1 -c -o /dev/null -x ir -
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: cold noreturn nounwind
declare void @llvm.ubsantrap(i8 immarg) #0
define void @f(ptr %cpi, ptr %x, i32 %i.0, i1 %cmp125.not) {
entry:
br label %for.cond
trap3: ; preds = %if.end147, %if.else141, %for.body
call void @llvm.ubsantrap(i8 0)
unreachable
for.cond: ; preds = %cont93, %entry
%i.01 = phi i32 [ 0, %entry ], [ %inc, %cont93 ]
%cmp91 = icmp ult i32 %i.01, 20
br i1 %cmp91, label %for.body, label %for.cond116
for.body: ; preds = %for.cond
%0 = icmp eq ptr %x, null
br i1 %0, label %cont93, label %trap3
cont93: ; preds = %for.body
%inc = or i32 %i.0, 1
br label %for.cond
for.cond116: ; preds = %cont148, %for.cond
%i.1 = phi i32 [ %inc158, %cont148 ], [ 0, %for.cond ]
%cmp117 = icmp ult i32 %i.1, 20
br i1 %cmp117, label %cont120, label %cont213
cont120: ; preds = %for.cond116
br i1 %cmp125.not, label %if.else141, label %if.end147
if.else141: ; preds = %cont120
%1 = ptrtoint ptr %x to i64
%2 = and i64 %1, 1
%3 = icmp eq i64 %2, 0
br i1 %3, label %cont146, label %trap3
cont146: ; preds = %if.else141
store i32 0, ptr %cpi, align 4
br label %if.end147
if.end147: ; preds = %cont146, %cont120
%4 = ptrtoint ptr %x to i64
%5 = and i64 %4, 1
%6 = icmp eq i64 %5, 0
br i1 %6, label %cont148, label %trap3
cont148: ; preds = %if.end147
%inc158 = or i32 %i.0, 1
br label %for.cond116
cont213: ; preds = %for.cond116
ret void
}
attributes #0 = { cold noreturn nounwind }
include/c++/v1/__debug_utils/strict_weak_ordering_check.h:59: assertion __comp(*(__first + __a), *(__first + __b)) failed: Your comparator is not a valid strict-weak ordering
PLEASE submit a bug report to ... and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: blaze-bin/third_party/llvm/llvm-project/clang/clang -O1 -c -o /dev/null -x ir -
1. Optimizer
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysV1tz66oV_jX4ZY08Al0sPfjBjuPTPedMd2bndDp90iBANg0GFaFc9q_vgGRHvmQ3aZvJyAIWsPjWt9C3aNfJnRZiibI1IkTLJ8kQISjbzGjv9sYuqRKvzX5WG_623DvXdihZIbJFZLuTbt_Xc2YOiGyVej7-RK01_xTMIbJte6UQ2S6SPCeAyBb4YhHnCx4XNGmynDPCY5GzMqs5KTLCyjThzSJNKEjtrOE9Ex1QDbTrhHXSaGioVL0V8LIXGu4U1TuQHTBzaKUSHF6k24PbC-iclczBi6BPYCwXVuodsL1gT9AYGyZQS52xHQhNaz9XalCyZoisEVmPtogUKI-jTfXHt_Xdw0O1uV__7bfq8c8f3-7-rP5-v_q9-v5jc__j219_q-7-cn_3O8pjREoPUbxB8co3h_-hSVJgwefoO4aIQWQ8Klw8I7LVvVIQvYK0EA3mjtqdcMCpo4q-md4BSjaACBHRASUrEbVkEaNklZDw8E183vRveRoekTy9YFKgZIVJETVFPL7p0JUfp-dp9OjNCDlzxVnZKnF047XIqzyNev2kzYuOlNT9a7TT_WnW-EzWsO01C_FbOWc9hYAZxUEbK1xvNWjT6xep-TCDC6aoFfBsJAeUxp5V877uqHaWtogUsgB5OFC7Q6QERJJ4uh8XjdTvkxtEitZZQCRjrUTkDsbWq3-XiSdmJudxaOFgdmgxyebauLD8Yj2sK7Szb6fQAtQWFK2F8lMaY-fMHP0fMbO0TfxRv_DnsWqt4N2IcSabudAcpwvv3thWncApHjv8zj45j14xqtQvgQsEHYx7bQVle0__qeOnw3zB9yvHmdGuTEYnB-hGDwe4cTBs93IIQbaGeGoMKNuEdrYOEzQbR4d1w_Cw3hCwclhPskMLvXKTuAagSDyJ2inKZRg7C2KA8rLTg4FxfolRsP1fMDpnTUAmfj-G-NcZU_39cHWI-MzXd8xPXQMJJ46PNl-i5U3Hp6QbIhRGjb3IKfzZfJki_Vn3btIOp8UkOS4AlvNr5g3u46yYcAynxZSD8cWKEwIerwy8-ICCv2AgxourCGJyHVWCr4Lozb4SxQ_Zd2L2hWvHK3Diyvntc9Y9XFITHye2n3bzdjjfoUMkG6PnrDNSu1OGgDPgv3DvhiQYUs19f5h5xkZEsuQs10Yr4q2uY5VchynN_3OmeaNkdftaH8EZd-qcsSJwJp58o8YvFlVypyG9lUkfYj903tp84v1NiNPPQpxdQpxeQpzfgji7DXF-A-LiMxAXH0I8AQbes_y_uKcubv9jSv6_888KF77d416LzXRT6pyVde9EFyTPsMxi_YGSgtNsqZnquUBkO2pbRLbPGJFtVXFR97uqd1J1iGwHzVx5zVwdNXMVdPB8j5JV5nXtRIpXlVfRXiGTFSJFVTXSdg68eK4q6lVGINj1WB3GyqDlRVAZ_zD9VJN7Sa-NAwrPVEk-ivnoTMwPZ3v44371eA9dXx-kt6_7HVjRGus8W-fz-cDOAYFQGDBLuz3UlD05S5kIuWZFaw0TXSc4dKa3Q7efSbvOMEmd4GB7DR2zsnXzYe9HR9kT8P7QnkRhPB9i_WDNztIDULvrD0K7oHhrRX-KqJYaka3bS8urllr39mHxFCqF4-_nKgY87v-9dfIgfwp7uwwJzxlfJrxMSjoTS7wgOcniRRbP9suSJbXgcZ3RpmjKQuSU4lIQIoRI0zRpZnJJYpLGJU5wEWfpYl6mTdnUKa5rynGd1SiNxYFKNQ_609jdTHZdL5Y4LnJczEJ2dceSU7xAGB3LTrsMMNT9rvMCVnaue1_GSafEEpFkqCinReLtiu9ZGkUDW6UGOqHYrLfq6_VscNSnyniS5yX5dwAAAP__mlg1zQ">