aaron.ballman added a comment.

Basically looking good to me now, but the changes need a release note and I 
does this mean we can change cxx_status.html to claim full support for P2002R1 
now or is there more left to be done for that? (If there's more left to do, 
adding those details to the cxx_status page would be appropriate.)



================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:9436
+def err_ref_qualifier_comparison_operator : Error<
+  "ref-qualifier '&&' is not allowed on defaulted comparison operators">;
 
----------------
ilya-biryukov wrote:
> NIT: for consistency with the wording of `err_ref_qualifier_constructor`
Still need to drop the `s` from `operators`


================
Comment at: clang/lib/Sema/SemaDeclCXX.cpp:8593-8601
+    const FunctionProtoType *FnType = 
FD->getType()->castAs<FunctionProtoType>();
+    if (FnType->isVolatile()) {
+      Diag(FD->getLocation(), diag::err_volatile_comparison_operator);
+      return true;
+    }
+    if (FnType->getRefQualifier() == RQ_RValue) {
+      Diag(FD->getLocation(), diag::err_ref_qualifier_comparison_operator);
----------------
massberg wrote:
> massberg wrote:
> > aaron.ballman wrote:
> > > aaron.ballman wrote:
> > > > ilya-biryukov wrote:
> > > > > NIT: this version is simpler and more aligned with the code below.
> > > > > Also, could you move the `volatile` handling after the check for 
> > > > > `const`?
> > > > > 
> > > > > 
> > > > > Additionally, we seem to recover in case of `const` by adding it to 
> > > > > the type and suggesting a fix-it to add it in the code.
> > > > > Could we do the same for `volatile` and `ref-qualifier`, i.e. suggest 
> > > > > a fix-it to remove the `ref-qualifier` and `volatile` and change the 
> > > > > corresponding type to make AST pretend they were never there?
> > > > 
> > > Note, you can shorten it further with:
> > > ```
> > > return Diag(...);
> > > ```
> > > because that will return true for you.
> > Thanks! Which the change suggested by Ilya this has become obsolete.
> Thanks, this is much simpler!
> 
> I have moved the code and added a recovery. However, adding a fix-it is much 
> more complex as there is no simple way to get location to remove the 
> keywords. Thus I decided to not offering a fix-it in this patch.
Yeah, it seems we don't track the ref qualifier location on any of the 
`CXXMethodDecl`, `FunctionProtoType`, or `FunctionProtoTypeLoc` classes. A 
future refactoring can consider adding locations for those to 
`FunctionProtoTypeLoc`, but needs to be able to handle multiple qualifiers 
(e.g., `void func() const &;` should track both the `const` and the `&` 
separately).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D148924/new/

https://reviews.llvm.org/D148924

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to