Skip to content

Commit

Permalink
[Clang] Fix strict weak ordering in ItaniumVTableBuilder
Browse files Browse the repository at this point in the history
In sorting elements can compare with themselves and sometimes assert
further down the line was triggered.

The changes are somewhat NFC, which explains the lack of test coverage.
libc++ has a debug mode that enables extra precondition checking. When
Clang is built with libc++ in that special mode, a few of Clang's tests
would fail with the libc++ assertion because Clang was not honoring the
preconditions for std::stable_sort. However, Clang would not hit the
precondition failure with any release mode STL, so the changes have no
impact on users beyond ones in this very special circumstance.

Differential Revision: https://reviews.llvm.org/D155809
  • Loading branch information
danlark1 authored and AaronBallman committed Aug 2, 2023
1 parent 5bbfbd9 commit ecdded5
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions clang/lib/AST/VTableBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1560,6 +1560,8 @@ void ItaniumVTableBuilder::AddMethods(
std::stable_sort(
NewImplicitVirtualFunctions.begin(), NewImplicitVirtualFunctions.end(),
[](const CXXMethodDecl *A, const CXXMethodDecl *B) {
if (A == B)
return false;
if (A->isCopyAssignmentOperator() != B->isCopyAssignmentOperator())
return A->isCopyAssignmentOperator();
if (A->isMoveAssignmentOperator() != B->isMoveAssignmentOperator())
Expand Down

0 comments on commit ecdded5

Please sign in to comment.