r305860 - Special-case handling of destructors in override lists when dumping ASTs.

Lang Hames via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 13 14:00:39 PDT 2017


Sure.

Richard - is this likely to be related to your query? Calling getName() on
at least one destructor in Sema/ms_class_layout triggers the assertion in
NamedDecl::getName():

(lldb)
frame #4: 0x00000001039600e2
clang`clang::NamedDecl::getName(this=0x0000000112897490) const at Decl.h:238
   235    /// This requires that the declaration have a name and that it be
a simple
   236    /// identifier.
   237    StringRef getName() const {
-> 238      assert(Name.isIdentifier() && "Name is not a simple
identifier");
   239      return getIdentifier() ? getIdentifier()->getName() : "";
   240    }
   241
(lldb) expr this->dump()
CXXDestructorDecl 0x112897490
</Users/lhames/Projects/llvm/llvm-svn-tot/llvm/tools/clang/test/Sema/ms_class_layout.cpp:102:3,
col:17> col:11 used ~IA 'void (void) __attribute__((thiscall))' virtual
`-CompoundStmt 0x1128977f8 <col:16, col:17>

- Lang.

On Wed, Jul 12, 2017 at 10:36 PM, Akira Hatanaka <ahatanaka at apple.com>
wrote:

> Hi Lang,
>
> clang crashes when I compile the following code with "-Xclang -ast-dump”:
>
> class Base {
> public:
>   virtual void operator()() {}
> };
>
> class Derived : public Base {
> public:
>   void operator()() override {}
> };
>
> If I change “OS << D->getName()” to “OS << D->getNameAsString()”, the
> crash disappears.
>
> Can you take a look please?
>
> On Jun 20, 2017, at 2:30 PM, Lang Hames via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
> Author: lhames
> Date: Tue Jun 20 16:30:43 2017
> New Revision: 305860
>
> URL: http://llvm.org/viewvc/llvm-project?rev=305860&view=rev
> Log:
> Special-case handling of destructors in override lists when dumping ASTs.
>
> Fixes a bug in r305850: CXXDestructors don't have names, so we need to
> handle
> printing of them separately.
>
>
> Modified:
>    cfe/trunk/lib/AST/ASTDumper.cpp
>
> Modified: cfe/trunk/lib/AST/ASTDumper.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTDum
> per.cpp?rev=305860&r1=305859&r2=305860&view=diff
> ============================================================
> ==================
> --- cfe/trunk/lib/AST/ASTDumper.cpp (original)
> +++ cfe/trunk/lib/AST/ASTDumper.cpp Tue Jun 20 16:30:43 2017
> @@ -1189,9 +1189,12 @@ void ASTDumper::VisitFunctionDecl(const
>       auto dumpOverride =
>         [=](const CXXMethodDecl *D) {
>           SplitQualType T_split = D->getType().split();
> -          OS << D << " " << D->getParent()->getName() << "::"
> -             << D->getName() << " '"
> -             << QualType::getAsString(T_split) << "'";
> +          OS << D << " " << D->getParent()->getName() << "::";
> +          if (isa<CXXDestructorDecl>(D))
> +            OS << "~" << D->getParent()->getName();
> +          else
> +            OS << D->getName();
>
> +          OS << " '" << QualType::getAsString(T_split) << "'";
>         };
>
>       dumpChild([=] {
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170713/6627cf58/attachment.html>


More information about the cfe-commits mailing list