>> >> 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