<div dir="ltr"><br>Forgot to seek your comments on this one. <div>Some of my test cases are failing due to this.</div><div><br></div><div>Thanks!</div><div>--Sourabh<br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">Sourabh Singh Tomar</strong> <span dir="auto"><<a href="mailto:sourav0311@gmail.com">sourav0311@gmail.com</a>></span><br>Date: Fri, Sep 20, 2019 at 5:33 PM<br>Subject: Triviality of C++11 Copy/Move Constructor, Destructor in clang AST.<br>To: <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>>, <<a href="mailto:jinisusan.george@amd.com">jinisusan.george@amd.com</a>>, <<a href="mailto:sourabhsingh.tomar@amd.com">sourabhsingh.tomar@amd.com</a>><br></div><br><br><div dir="ltr">Hi All,<div><br></div><div>We're working DWARF-5 support in clang, c++11 Defaulted, deleted member functions. </div><div>We're facing an issue while parsing attributes of a destructor which is defined out of class. as default.</div><div>as in</div><div>class foo {</div><div> public;</div><div> foo();</div><div> ~foo();</div><div>};</div><div>foo::foo() = default;</div><div>foo::~foo() = default;</div><div><br></div><div>Here's the code snippet of clang changes--</div><div><br></div><div>if (const auto *DXXC = dyn_cast<CXXDestructorDecl>(Method)) {<br>1624 if (DXXC->getCanonicalDecl()->isDeleted())<br>1625 SPFlags |= llvm::DISubprogram::SPFlagDeleted;<br>1626<br>1627 if (DXXC->getCanonicalDecl()->isDefaulted())<br>1628 SPFlags |= llvm::DISubprogram::SPFlagDefaultedInClass;<br>1629 else if (DXXC->isDefined()) {<br>1630 if (DXXC->getDefinition()->isDefaulted()) {<br>1631 SPFlags |= llvm::DISubprogram::SPFlagDefaultedOutOfClass;<br>1632 }<br>1633 else {<br>1634 SPFlags |= llvm::DISubprogram::SPFlagNotDefaulted;<br>1635 }<br>1636 }<br>1637 }<br></div><div><br></div><div>For, out of class destructor definition defaulted, as mentioned above. We're not able get
SPFlagDefaultedOutOfClass or
SPFlagNotDefaulted.</div><div><br></div><div>seems like their is no definition of destructor, even when, we are defining them out of class as default; ??</div><div> 1629 else if (DXXC->isDefined()) -- evaluates as false <br></div><div><br></div><div>On the other side, If we declare our destructor as virtual, then above checks passes gracefully -- suggesting clang created a non-trivial destructor definition. </div><div><br></div><div>Is this behavior okay ?? , -- this behavior is also prevalent in copy/move constructor and assignments. </div><div><br></div><div>Note-- For Constructor out of class definition as default -- clang create non-trivial constructor definition, and above check passes and we're are able to check capture the information about, whether the constructor is defaulted in class or out of class.</div><div><br></div><div>Any thoughts, greatly appreciated.</div><div><br></div><div>Thanks!</div><div>Sourabh Singh Tomar</div></div>
</div></div></div>