Closed
Description
#73662 / d77067d 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