aaron.ballman added inline comments.

================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:1915-1916
+
+    if (const CXXDestructorDecl *Dtor = ElemRecord->getDestructor();
+        Dtor && !Dtor->isTrivial()) {
+      for (size_t I = 0, E = Desc->getNumElems(); I != E; ++I) {
----------------
tbaeder wrote:
> aaron.ballman wrote:
> > `isTrivial()` only works once the class has been fully built up by Sema 
> > IIRC; we should have a test case for that situation.
> Are you saying that `isTrivial()` cannot be used like this, or just that it 
> can, but needs a test case to ensure that this is true?
> 
> Also, how would such a test case look like?
`Sema::DeclareImplicitDestructor()` decides whether the destructor is trivial 
or not, and that is based on information that the class collects as the class 
is being declared. While the class is being parsed, the `DeclarationData` for 
the class is updated as we go and we use that to decide if we need the 
destructor, whether it's trivial, etc. So it's possible for us to have not seen 
a part of the class yet that would cause the special member function to be 
(non)trivial and so asking the method "are you trivial" may give a different 
answer depending on when the question is asked.

In terms of a test case, I think it would be trying to hit one of these cases 
http://eel.is/c++draft/class.mem#class.dtor-8 by using a constexpr function 
that needs to be evaluated before we get to something that causes the dtor to 
no longer be trivial.


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

https://reviews.llvm.org/D137070

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

Reply via email to