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

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Mon Oct 7 15:35:34 PDT 2019


I saw it was already under review & didn't see any particular spots that
referred to the problems you mentioned in this thread - if there are bugs
in the code as it is in the review, it'd be good to highlight those in the
review description and probably in the test cases (FIXME and/or CHECKs that
currently fail to demonstrate what the behavior should be, etc)

On Mon, Oct 7, 2019 at 3:26 PM Sourabh Singh Tomar via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

>
> 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
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191007/e3404143/attachment.html>


More information about the llvm-dev mailing list