[cfe-commits] r151255 - /cfe/trunk/lib/AST/CXXInheritance.cpp

Eli Friedman eli.friedman at gmail.com
Thu Feb 23 10:11:40 PST 2012


On Thu, Feb 23, 2012 at 7:18 AM, Benjamin Kramer
<benny.kra at googlemail.com> wrote:
> Author: d0k
> Date: Thu Feb 23 09:18:31 2012
> New Revision: 151255
>
> URL: http://llvm.org/viewvc/llvm-project?rev=151255&view=rev
> Log:
> Unique CXXBasePath decls with the SmallVector/pod_sort/std::unique idiom instead of employing a wasteful std::set.
>
> Modified:
>    cfe/trunk/lib/AST/CXXInheritance.cpp
>
> Modified: cfe/trunk/lib/AST/CXXInheritance.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/CXXInheritance.cpp?rev=151255&r1=151254&r2=151255&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/CXXInheritance.cpp (original)
> +++ cfe/trunk/lib/AST/CXXInheritance.cpp Thu Feb 23 09:18:31 2012
> @@ -23,12 +23,15 @@
>  void CXXBasePaths::ComputeDeclsFound() {
>   assert(NumDeclsFound == 0 && !DeclsFound &&
>          "Already computed the set of declarations");
> -
> -  std::set<NamedDecl *> Decls;
> -  for (CXXBasePaths::paths_iterator Path = begin(), PathEnd = end();
> -       Path != PathEnd; ++Path)
> -    Decls.insert(*Path->Decls.first);
> -
> +
> +  SmallVector<NamedDecl *, 8> Decls;
> +  for (paths_iterator Path = begin(), PathEnd = end(); Path != PathEnd; ++Path)
> +    Decls.push_back(*Path->Decls.first);
> +
> +  // Eliminate duplicated decls.
> +  llvm::array_pod_sort(Decls.begin(), Decls.end());
> +  std::unique(Decls.begin(), Decls.end());

Does this usage of std::unique actually do the right thing?  You never
actually shrink the SmallVector.

-Eli




More information about the cfe-commits mailing list