diff options
author | Eric Fiselier <eric@efcs.ca> | 2018-02-10 02:53:47 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2018-02-10 02:53:47 +0000 |
commit | 9bfdb770cc7f513546468e9a4867fa9fdce6caaf (patch) | |
tree | 51523eb1332d36ad75733f471d2708be267ba386 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 08225bbed4a26b953b9e43b66cf1f6756917c9c4 (diff) | |
download | bcm5719-llvm-9bfdb770cc7f513546468e9a4867fa9fdce6caaf.tar.gz bcm5719-llvm-9bfdb770cc7f513546468e9a4867fa9fdce6caaf.zip |
Use multi-key tree search for {map, set}::{count, equal_range}
Patch from ngolovliov@gmail.com
Reviewed as: https://reviews.llvm.org/D42344
As described in llvm.org/PR30959, the current
implementation of std::{map, key}::{count, equal_range} in libcxx is
non-conforming. Quoting the C++14 standard [associative.reqmts]p3
> The phrase “equivalence of keys” means the equivalence relation imposed by
> the comparison and not the operator== on keys. That is, two keys k1 and k2 are
> considered to be equivalent if for the comparison object comp,
> comp(k1, k2) == false && comp(k2, k1) == false.
In the same section, the requirements table states the following:
> a.equal_range(k) equivalent to make_pair(a.lower_bound(k), a.upper_bound(k))
> a.count(k) returns the number of elements with key equivalent to k
The behaviour of libstdc++ seems to conform to the standard here.
llvm-svn: 324799
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions