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

Sourabh Singh Tomar via llvm-dev llvm-dev at lists.llvm.org
Mon Oct 7 15:26:03 PDT 2019


Forgot to seek your comments on this one.
Some of my test cases are failing due to this.

Thanks!
--Sourabh
---------- Forwarded message ---------
From: Sourabh Singh Tomar <sourav0311 at gmail.com>
Date: Fri, Sep 20, 2019 at 5:33 PM
Subject: Triviality of C++11 Copy/Move Constructor, Destructor in clang AST.
To: <cfe-dev at lists.llvm.org>, <jinisusan.george at amd.com>, <
sourabhsingh.tomar at amd.com>


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/llvm-dev/attachments/20191008/eed0e231/attachment.html>


More information about the llvm-dev mailing list