Fix other part of #8710.

- When binary searching functions in the source entry list,
  comparing by name and location alone isn't sufficient, since
  templates will match those for different instances, Fixes a crash on
  exit where the wrong function would get removed from the list, while
  the one we actually wanted to remove was still in the list, but then
  had its source code cleared. This would later crash the comparison
  function due to not being able to get its source location.
This commit is contained in:
Rene Gollent
2012-07-11 23:39:17 -04:00
parent aeadcf457d
commit 95453175cd
@@ -1,5 +1,6 @@
/*
* Copyright 2009, Ingo Weinhold, [email protected].
* Copyright 2012, Rene Gollent, [email protected].
* Distributed under the terms of the MIT License.
*/
@@ -194,7 +195,13 @@ private:
if (locationA < locationB)
return -1;
return locationA == locationB ? 0 : 1;
if (locationA != locationB )
return 1;
// if the locations match we still need to compare by name to be
// certain, since differently typed instantiations of template
// functions will have the same source file and location
return a->Name().Compare(b->Name());
}
static int _CompareLocationFunction(const SourceLocation* location,