royjacobson added inline comments.

================
Comment at: clang/bindings/python/clang/cindex.py:1530
+
+    def record_needs_implicit_default_constructor(self):
+        """Returns True if the cursor refers to a C++ record declaration
----------------
aaron.ballman wrote:
> aaron.ballman wrote:
> > I don't think we should expose any of the "needs" functions like this -- 
> > those are internal implementation details of the class and I don't think we 
> > want to calcify that into something we have to support forever. As we add 
> > members to a class, we recalculate whether the added member causes us to 
> > delete defaulted special members (among other things), and the "needs" 
> > functions are basically used when the class is completed to handle lazily 
> > created special members. I'm pretty sure that lazy creation is not mandated 
> > by the standard, which is why I think the "needs" functions are more of an 
> > implementation detail.
> CC @erichkeane and @royjacobson as folks who have been in this same area of 
> the compiler to see if they agree or disagree with my assessment there.
I think so. The 'needs_*' functions query `DeclaredSpecialMembers` and I'm 
pretty sure it's modified when we add the implicit definitions in the class 
completion code. So this looks a bit suspicious. Is this API //meant// to be 
used with incomplete classes?
For complete classes I think looking up the default/move/copy constructor and 
calling `isImplicit()` is the way to do it.

About the 'is deleted' API - can't the same be done for those functions as well 
so we have a smaller API? 

If this //is// meant to be used with incomplete classes for efficiency that 
would be another thing, I guess.



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D135557

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

Reply via email to