ahatanak marked 2 inline comments as done.
ahatanak added inline comments.

================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:2953
+  "have bases of non-trivial class types|have virtual bases|"
+  "have __weak fields under ARC|have fields of non-trivial class types}0">;
 
----------------
Quuxplusone wrote:
> nit: "of non-trivial class types" should be "of non-trivial class type" in 
> both places.
> 
> And I would write "are not move-constructible" rather than "don't have 
> non-deleted copy/move constructors". Double negations aren't non-bad.
> 
> Actually I would rephrase this as `'trivial_abi' is disallowed on this class 
> because it %select{is not move-constructible|is polymorphic|has a base of 
> non-trivial class type|has a virtual base|has a __weak field|has a field of 
> non-trivial class type}`, i.e., we're not just giving information about 
> "classes" in general, we're talking about "this class" specifically. We could 
> even name the class if we're feeling generous.
Does not being move-constructible imply that the class doesn't have a *public* 
copy or move constructor that isn't deleted? If it does, that is slightly 
different than saying the copy and move constructors of the class are all 
deleted. When the users see the message "is not move-constructible", they might 
think the copy or move constructor that isn't deleted has to be public in order 
to annotate the class with `trivial_abi`. For `trivial_abi`, a private one is 
good enough.

I think your other suggestions are all good ideas.


================
Comment at: lib/Sema/SemaDeclCXX.cpp:7886
+    return false;
+  };
+
----------------
Quuxplusone wrote:
> How confident are we that this logic is correct?  I ask because I need 
> something similar for my own diagnostic in D50119. If this logic is 
> rock-solid (no lurking corner-case bugs), I should copy it — and/or it should 
> be moved into a helper member function on `CXXRecordDecl` so that other 
> people can call it too.
I think it's correct. The first part looks for implicit constructors that are 
not deleted, and the for loop looks for the explicitly declared ones that 
aren't deleted.


Repository:
  rC Clang

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

https://reviews.llvm.org/D57626



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

Reply via email to