[clang] d3224dc - [clang][Sema] Fix const FixIt placement after comparison operator member definition (#188093)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 30 21:56:06 PDT 2026
Author: NeKon69
Date: 2026-03-31T00:56:00-04:00
New Revision: d3224dc5da99877602f997c16bc5dffc775c5248
URL: https://github.com/llvm/llvm-project/commit/d3224dc5da99877602f997c16bc5dffc775c5248
DIFF: https://github.com/llvm/llvm-project/commit/d3224dc5da99877602f997c16bc5dffc775c5248.diff
LOG: [clang][Sema] Fix const FixIt placement after comparison operator member definition (#188093)
Update `InsertLoc` to use the token after the closing parenthesis
when adding `const` qualification to a comparison operator
Fixes #187887
Added:
clang/test/FixIt/fixit-defaulted-comparison.cpp
Modified:
clang/lib/Sema/SemaDeclCXX.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index b3a02a3fd5d02..a33842ca56536 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -9039,7 +9039,7 @@ bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD,
} else {
Loc = MD->getLocation();
if (FunctionTypeLoc Loc = MD->getFunctionTypeLoc())
- InsertLoc = Loc.getRParenLoc();
+ InsertLoc = getLocForEndOfToken(Loc.getRParenLoc());
}
// Don't diagnose an implicit 'operator=='; we will have diagnosed the
// corresponding defaulted 'operator<=>' already.
diff --git a/clang/test/FixIt/fixit-defaulted-comparison.cpp b/clang/test/FixIt/fixit-defaulted-comparison.cpp
new file mode 100644
index 0000000000000..c59ba45f886f8
--- /dev/null
+++ b/clang/test/FixIt/fixit-defaulted-comparison.cpp
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -verify -std=c++23 %s
+// RUN: cp %s %t
+// RUN: not %clang_cc1 -std=c++23 -x c++ -fixit %t
+// RUN: %clang_cc1 -std=c++23 -x c++ %t
+// RUN: not %clang_cc1 -std=c++23 -x c++ -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s
+
+namespace std {
+struct partial_ordering {};
+} // namespace std
+
+struct Box {
+ std::partial_ordering operator<=>(const Box& other) = default; // #ssdecl
+ bool operator==(const Box& other) = default; // #eqdecl
+ // expected-error@#ssdecl {{defaulted member three-way comparison operator must be const-qualified}}
+ // expected-error@#eqdecl {{defaulted member equality comparison operator must be const-qualified}}
+ // CHECK: fix-it:{{.*}}:{12:54-12:54}:" const"
+ // CHECK: fix-it:{{.*}}:{13:36-13:36}:" const"
+};
More information about the cfe-commits
mailing list