FWIW: Replacing the call to getName with getNameAsString seems to fix the destructor issue as well (i.e. I can remove the special case for destructors) so I've committed this r307959.
If the getName failure for destructors is unexpected it may be worth digging into as a separate issue. Cheers, Lang. On Thu, Jul 13, 2017 at 2:00 PM, Lang Hames <lha...@gmail.com> wrote: > 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 <ahatan...@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@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@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >> >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits