>> 
>> Are you pulling in data from two different copies of LLVM in your project? 
>> Or is something in here symlink to the other somewhere?
> 
> Excellent find. Yes, 3p_mirror is a symlink to the 3p-tmw-osx location.
> 
>> So to sum up: LLDB uniques types by decl file + decl line + byte size + 
>> fully qualified typename and that is failing because the decl files are 
>> different for these two types from the debug infos point of view. And these 
>> types could actually differ since they come from different files and we need 
>> to allow this so that we can display these types.
> 
> I'm slightly confused: can't we ask Clang to tell us if the two types
> are structurally equivalent? Is this some short-cut? We need to
> account for symlinks then, it seems.


Yep. Try replacing Declaration::Compare() in 
lldb/source/Symbol/Declaration.cpp. You will need to include:

#include "lldb/Host/FileSystem.h"


Then replace Declaration::Compare() with this:

int
Declaration::Compare(const Declaration& a, const Declaration& b)
{
    int result = FileSpec::Compare(a.m_file, b.m_file, true);
    if (result)
    {
        int symlink_result = result;
        if (a.m_file.GetFilename() == b.m_file.GetFilename())
        {
            // Check if the directories in a and b are symlinks to each other
            FileSpec resolved_a;
            FileSpec resolved_b;
            if (FileSystem::ResolveSymbolicLink(a.m_file, resolved_a).Success() 
&&
                FileSystem::ResolveSymbolicLink(b.m_file, resolved_b).Success())
            {
                symlink_result = FileSpec::Compare(resolved_a, resolved_b, 
true);
            }
        }
        if (symlink_result != 0)
            return symlink_result;
    }
    if (a.m_line < b.m_line)
        return -1;
    else if (a.m_line > b.m_line)
        return 1;
#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
    if (a.m_column < b.m_column)
        return -1;
    else if (a.m_column > b.m_column)
        return 1;
#endif
    return 0;
}

Then try running and let me know what your results are!
_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to