[cfe-dev] Bug 15125 - FunctionDecl::getNameInfo().getEndLoc() is off-by-one for C++ destructors

James Abbatiello abbeyj at gmail.com
Wed Feb 13 14:23:35 PST 2013


Hello,

I've been looking into http://llvm.org/bugs/show_bug.cgi?id=15125 and I
think I have an idea of where the problem is coming from but not how to fix
it.  Advice or input of any kind would be welcome.

At http://clang.llvm.org/doxygen/DeclarationName_8cpp_source.html#l00578,
the  TInfo variable is always NULL in my experiments.  So the code returns
NameLoc (the start location) instead of the end.

This NULL value comes from
http://clang.llvm.org/doxygen/d9/d4f/SemaDecl_8cpp_source.html#l03002.
This code calls GetTypeFromParser with the type of the class (a
RecordType).  GetTypeFromPointer will then try to dyn_cast this to
LocInfoType which gets NULL.  That NULL eventually ends up in TInfo above.

At this point we have both the needed SourceLocations in Name.StartLocation
and Name.EndLocation but we need a LocInfoType instead.  Can I retrieve or
construct one that's appropriate here?  Or should the anonymous union in
DeclarationNameLoc be extended to be able to hold a TInfo* and an end
location when handling one of CXXConstructorName, CXXDestructorName and
CXXConversionFunctionName?

-- 
James Abbatiello
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130213/5ab81dd9/attachment.html>


More information about the cfe-dev mailing list