[cfe-dev] Triviality of C++11 Copy/Move Constructor, Destructor in clang AST.

Sourabh Singh Tomar via cfe-dev cfe-dev at lists.llvm.org
Fri Sep 20 05:03:38 PDT 2019


Hi All,

We're working DWARF-5 support in clang, c++11 Defaulted, deleted member
functions.
We're facing an issue while parsing attributes of a destructor which is
defined out of class. as default.
as in
class foo {
      public;
           foo();
           ~foo();
};
foo::foo() = default;
foo::~foo() = default;

Here's the code snippet of clang changes--

if (const auto *DXXC = dyn_cast<CXXDestructorDecl>(Method)) {
1624       if (DXXC->getCanonicalDecl()->isDeleted())
1625         SPFlags |= llvm::DISubprogram::SPFlagDeleted;
1626
1627       if (DXXC->getCanonicalDecl()->isDefaulted())
1628         SPFlags |= llvm::DISubprogram::SPFlagDefaultedInClass;
1629       else if (DXXC->isDefined()) {
1630         if (DXXC->getDefinition()->isDefaulted()) {
1631           SPFlags |= llvm::DISubprogram::SPFlagDefaultedOutOfClass;
1632         }
1633         else {
1634           SPFlags |= llvm::DISubprogram::SPFlagNotDefaulted;
1635         }
1636       }
1637     }

For, out of class  destructor definition defaulted, as mentioned above.
We're not able get  SPFlagDefaultedOutOfClass or  SPFlagNotDefaulted.

seems like their is no definition of destructor, even when, we are defining
them out of class as default; ??
  1629       else if (DXXC->isDefined())  -- evaluates as false

On the other side, If we declare our destructor as virtual, then above
checks passes gracefully -- suggesting clang created a non-trivial
destructor definition.

Is this behavior okay  ?? , -- this behavior is also prevalent in copy/move
constructor and assignments.

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.

Any thoughts, greatly appreciated.

Thanks!
Sourabh Singh Tomar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190920/d020bbba/attachment.html>


More information about the cfe-dev mailing list