[Lldb-commits] [lldb] r129595 - /lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugAranges.cpp

Stephen Wilson wilsons at start.ca
Fri Apr 15 13:51:40 PDT 2011


Hi Johnny,

On Fri, Apr 15, 2011 at 07:56:24PM -0000, Johnny Chen wrote:
> +    // Remove the merged ranges by shifting down all the keepers...
> +    std::set<size_t> purged(indices.begin(), indices.end());
> +    size_t new_size = m_aranges.size() - indices.size();
> +    for (size_t src = 0, dst = 0; dst < new_size; ++dst)
> +    {
> +        while (purged.count(src) > 0)
> +            ++src;
> +        if (src == dst)
> +            continue;
> +        m_aranges[dst] = m_aranges[src];
> +    }

That looks broken to me.  Index zero is never in the purged set since we
merge ranges into their predecessors.  Therefore purged.count(0) == 0
and on the first iteration we have src == dst, so we increment dst.
What ends up happening is that src remains zero and we just do:

    for (i = 0; i < size; ++i) { m_arages[i] = m_aranges[0]; }


Now, I *think* I know what you were trying to do here, and I think the
main motivation on your side was to "clean up the code" -- but since the
name of the game of the patch was optimization replacing the original
O(n) approach with a "clean"  O(n log(n)) implementation is not the way
to go IMHO.

Is there something I can do to clean up the original patch without
reducing it's performance?


Cheers,

-- 
steve




More information about the lldb-commits mailing list