[lld] r218548 - Fix crash bug on Windows.

Duncan P. N. Exon Smith dexonsmith at apple.com
Fri Sep 26 16:21:07 PDT 2014


> On Sep 26, 2014, at 3:27 PM, Rui Ueyama <ruiu at google.com> wrote:
> 
> Author: ruiu
> Date: Fri Sep 26 17:27:42 2014
> New Revision: 218548
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=218548&view=rev
> Log:
> Fix crash bug on Windows.
> 
> Mutating the DenseMap here seems to cause the Windows executable
> to crash. Don't use operator[] to access possibly nonexistent key.
> 
> Modified:
>    lld/trunk/lib/Core/Resolver.cpp
> 
> Modified: lld/trunk/lib/Core/Resolver.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=218548&r1=218547&r2=218548&view=diff
> ==============================================================================
> --- lld/trunk/lib/Core/Resolver.cpp (original)
> +++ lld/trunk/lib/Core/Resolver.cpp Fri Sep 26 17:27:42 2014
> @@ -305,8 +305,10 @@ void Resolver::markLive(const Atom *atom
>   if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(atom)) {
>     for (const Reference *ref : *defAtom)
>       markLive(ref->target());
> -    for (const Atom *target : _reverseRef[defAtom])
> -      markLive(target);
> +    auto it = _reverseRef.find(defAtom);
> +    if (it != _reverseRef.end())
> +      for (const Atom *target : it->second)
> +        markLive(target);

Should this just be:

    for (const Atom *target : _reverseRef.lookup(defAtom))
      markLive(target);

?

>   }
> }
> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list