>>
>> 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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev