The llvm-dev mailing list might be a better place to ask this question.

Jim

> On Jul 3, 2014, at 1:06 PM, Alex Pepper <[email protected]> wrote:
> 
> I have been debugging LLDB trying to find where the name mangling is getting 
> messed up during eval parsing of std::string::c_str() and have traced it into 
> CXXNameMangler::mangleStandardSubstitution in ItaniumMangle.cpp which is part 
> of clangs AST module.  In mangleStandardSubstitution it is testing the 
> identifier to see if it is a ClassTemplateSpecializationDecl equivalent to 
> std::basic_string<char,std::char_traits<char>,std::allocator<char>> so that 
> it can substitute the short form mangled string "Ss".  This check fails on 
> the second template argument test where it is checking if it is a char 
> specialization of char_traits.
> 
> if (!isCharSpecialization(TemplateArgs[1].getAsType(), "char_traits"))
>        return false;
> 
> I have dumped the declaration to verify it is the correct identifier:
> class basic_string definition
> |-TemplateArgument type 'char'
> |-TemplateArgument type 'struct std::char_traits<char>'
> |-TemplateArgument type 'class std::allocator<char>'
> 
> I also dumped the template arguments separately:
> char identifier
> struct std::char_traits<char> identifier
> class std::allocator<char> identifier
> 
> I am not familiar enough yet with the Clang architecture to understand why 
> this check is failing.  Any suggestions on how to track this down would be 
> appreciated.
> 
> - Alex
> 
> _______________________________________________
> lldb-dev mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to