alexfh wrote: Apologies for resurrecting this old thread, but I found a problem with this patch. It seems like it makes a comparator violate strict weak ordering requirements. This manifests as an assertion failure when Clang is compiled with the corresponding libc++ 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 ``` https://github.com/llvm/llvm-project/pull/73662 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits