Merging r258184:
[oota-llvm.git] / include / llvm / ADT / Hashing.h
index 1a51f4cf72d5589da286e6bb52b996fca0889879..de56f91eddb154cc2c69c5dbae2b795f370aaaaa 100644 (file)
 #include <cassert>
 #include <cstring>
 #include <iterator>
+#include <string>
 #include <utility>
 
-// Allow detecting C++11 feature availability when building with Clang without
-// breaking other compilers.
-#ifndef __has_feature
-# define __has_feature(x) 0
-#endif
-
 namespace llvm {
 
 /// \brief An opaque object representing a hash code.
@@ -81,7 +76,7 @@ class hash_code {
 public:
   /// \brief Default construct a hash_code.
   /// Note that this leaves the value uninitialized.
-  hash_code() {}
+  hash_code() = default;
 
   /// \brief Form a hash code directly from a numerical value.
   hash_code(size_t value) : value(value) {}
@@ -553,8 +548,6 @@ public:
     return buffer_ptr;
   }
 
-#if defined(__has_feature) && __has_feature(__cxx_variadic_templates__)
-
   /// \brief Recursive, variadic combining method.
   ///
   /// This function recurses through each argument, combining that argument
@@ -568,218 +561,6 @@ public:
     return combine(length, buffer_ptr, buffer_end, args...);
   }
 
-#else
-  // Manually expanded recursive combining methods. See variadic above for
-  // documentation.
-
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10,
-            typename T11, typename T12, typename T13, typename T14,
-            typename T15, typename T16, typename T17, typename T18>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                    const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                    const T13 &arg13, const T14 &arg14, const T15 &arg15,
-                    const T16 &arg16, const T17 &arg17, const T18 &arg18) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
-                   arg16, arg17, arg18);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10,
-            typename T11, typename T12, typename T13, typename T14,
-            typename T15, typename T16, typename T17>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                    const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                    const T13 &arg13, const T14 &arg14, const T15 &arg15,
-                    const T16 &arg16, const T17 &arg17) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
-                   arg16, arg17);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10,
-            typename T11, typename T12, typename T13, typename T14,
-            typename T15, typename T16>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                    const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                    const T13 &arg13, const T14 &arg14, const T15 &arg15,
-                    const T16 &arg16) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15,
-                   arg16);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10,
-            typename T11, typename T12, typename T13, typename T14,
-            typename T15>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                    const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                    const T13 &arg13, const T14 &arg14, const T15 &arg15) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10,
-            typename T11, typename T12, typename T13, typename T14>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                    const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                    const T13 &arg13, const T14 &arg14) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10,
-            typename T11, typename T12, typename T13>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                    const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                    const T13 &arg13) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9, arg10, arg11, arg12, arg13);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10,
-            typename T11, typename T12>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                    const T10 &arg10, const T11 &arg11, const T12 &arg12) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9, arg10, arg11, arg12);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10,
-            typename T11>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                    const T10 &arg10, const T11 &arg11) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9, arg10, arg11);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9, typename T10>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                    const T10 &arg10) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9, arg10);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8, typename T9>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8, const T9 &arg9) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8, arg9);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7, typename T8>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7, const T8 &arg8) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7, arg8);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6, typename T7>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                    const T7 &arg7) {
-    buffer_ptr =
-        combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6,
-                   arg7);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-            typename T6>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5, const T6 &arg6) {
-    buffer_ptr = combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5, arg6);
-  }
-  template <typename T1, typename T2, typename T3, typename T4, typename T5>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4, const T5 &arg5) {
-    buffer_ptr = combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4, arg5);
-  }
-  template <typename T1, typename T2, typename T3, typename T4>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                    const T4 &arg4) {
-    buffer_ptr = combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3, arg4);
-  }
-  template <typename T1, typename T2, typename T3>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2, const T3 &arg3) {
-    buffer_ptr = combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2, arg3);
-  }
-  template <typename T1, typename T2>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1, const T2 &arg2) {
-    buffer_ptr = combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end, arg2);
-  }
-  template <typename T1>
-  hash_code combine(size_t length, char *buffer_ptr, char *buffer_end,
-                    const T1 &arg1) {
-    buffer_ptr = combine_data(length, buffer_ptr, buffer_end, get_hashable_data(arg1));
-    return combine(length, buffer_ptr, buffer_end);
-  }
-
-#endif
-
   /// \brief Base case for recursive, variadic combining.
   ///
   /// The base case when combining arguments recursively is reached when all
@@ -808,9 +589,6 @@ public:
 } // namespace detail
 } // namespace hashing
 
-
-#if __has_feature(__cxx_variadic_templates__)
-
 /// \brief Combine values into a single hash_code.
 ///
 /// This routine accepts a varying number of arguments of any type. It will
@@ -828,196 +606,6 @@ template <typename ...Ts> hash_code hash_combine(const Ts &...args) {
   return helper.combine(0, helper.buffer, helper.buffer + 64, args...);
 }
 
-#else
-
-// What follows are manually exploded overloads for each argument width. See
-// the above variadic definition for documentation and specification.
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10,
-          typename T11, typename T12, typename T13, typename T14, typename T15,
-          typename T16, typename T17, typename T18>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                       const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                       const T13 &arg13, const T14 &arg14, const T15 &arg15,
-                       const T16 &arg16, const T17 &arg17, const T18 &arg18) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
-                        arg13, arg14, arg15, arg16, arg17, arg18);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10,
-          typename T11, typename T12, typename T13, typename T14, typename T15,
-          typename T16, typename T17>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                       const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                       const T13 &arg13, const T14 &arg14, const T15 &arg15,
-                       const T16 &arg16, const T17 &arg17) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
-                        arg13, arg14, arg15, arg16, arg17);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10,
-          typename T11, typename T12, typename T13, typename T14, typename T15,
-          typename T16>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                       const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                       const T13 &arg13, const T14 &arg14, const T15 &arg15,
-                       const T16 &arg16) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
-                        arg13, arg14, arg15, arg16);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10,
-          typename T11, typename T12, typename T13, typename T14, typename T15>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                       const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                       const T13 &arg13, const T14 &arg14, const T15 &arg15) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
-                        arg13, arg14, arg15);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10,
-          typename T11, typename T12, typename T13, typename T14>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                       const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                       const T13 &arg13, const T14 &arg14) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
-                        arg13, arg14);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10,
-          typename T11, typename T12, typename T13>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                       const T10 &arg10, const T11 &arg11, const T12 &arg12,
-                       const T13 &arg13) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12,
-                        arg13);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10,
-          typename T11, typename T12>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                       const T10 &arg10, const T11 &arg11, const T12 &arg12) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11,
-                        arg12);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10,
-          typename T11>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                       const T10 &arg10, const T11 &arg11) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9,
-                       const T10 &arg10) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9, arg10);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8, const T9 &arg9) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8, arg9);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7, const T8 &arg8) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7, arg8);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6,
-                       const T7 &arg7) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3,
-                        arg4, arg5, arg6, arg7);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5, const T6 &arg6) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64,
-                        arg1, arg2, arg3, arg4, arg5, arg6);
-}
-template <typename T1, typename T2, typename T3, typename T4, typename T5>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4, const T5 &arg5) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64,
-                        arg1, arg2, arg3, arg4, arg5);
-}
-template <typename T1, typename T2, typename T3, typename T4>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3,
-                       const T4 &arg4) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64,
-                        arg1, arg2, arg3, arg4);
-}
-template <typename T1, typename T2, typename T3>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2, const T3 &arg3) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2, arg3);
-}
-template <typename T1, typename T2>
-hash_code hash_combine(const T1 &arg1, const T2 &arg2) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1, arg2);
-}
-template <typename T1>
-hash_code hash_combine(const T1 &arg1) {
-  ::llvm::hashing::detail::hash_combine_recursive_helper helper;
-  return helper.combine(0, helper.buffer, helper.buffer + 64, arg1);
-}
-
-#endif
-
-
 // Implementation details for implementations of hash_value overloads provided
 // here.
 namespace hashing {