summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Toth <jonas.toth@gmail.com>2018-12-03 19:41:04 +0000
committerJonas Toth <jonas.toth@gmail.com>2018-12-03 19:41:04 +0000
commit3f51ee19aec83bfd9de7289c0d5c9f7929abd2da (patch)
tree499cfa1fdc2802eb4a1590348fb4cef20156f4ab
parent1cbc5cd3643cee5625561beb57647e3d0b2f7fc9 (diff)
downloadbcm5719-llvm-3f51ee19aec83bfd9de7289c0d5c9f7929abd2da.tar.gz
bcm5719-llvm-3f51ee19aec83bfd9de7289c0d5c9f7929abd2da.zip
[clang-tidy] Fix unordered_map failure with specializing std::hash<> and remove previous wrong attempt at doing so
llvm-svn: 348172
-rw-r--r--clang-tools-extra/clang-tidy/abseil/DurationComparisonCheck.cpp3
-rw-r--r--clang-tools-extra/clang-tidy/abseil/DurationRewriter.h19
2 files changed, 20 insertions, 2 deletions
diff --git a/clang-tools-extra/clang-tidy/abseil/DurationComparisonCheck.cpp b/clang-tools-extra/clang-tidy/abseil/DurationComparisonCheck.cpp
index 15d03445a04..d5eb81b0f49 100644
--- a/clang-tools-extra/clang-tidy/abseil/DurationComparisonCheck.cpp
+++ b/clang-tools-extra/clang-tidy/abseil/DurationComparisonCheck.cpp
@@ -47,8 +47,7 @@ static llvm::Optional<DurationScale> getScaleForInverse(llvm::StringRef Name) {
static const std::pair<llvm::StringRef, llvm::StringRef> &
getInverseForScale(DurationScale Scale) {
static const std::unordered_map<DurationScale,
- std::pair<llvm::StringRef, llvm::StringRef>,
- std::hash<std::int8>>
+ std::pair<llvm::StringRef, llvm::StringRef>>
InverseMap(
{{DurationScale::Hours,
std::make_pair("::absl::ToDoubleHours", "::absl::ToInt64Hours")},
diff --git a/clang-tools-extra/clang-tidy/abseil/DurationRewriter.h b/clang-tools-extra/clang-tidy/abseil/DurationRewriter.h
index f5d2e0df60a..aac241fb8bc 100644
--- a/clang-tools-extra/clang-tidy/abseil/DurationRewriter.h
+++ b/clang-tools-extra/clang-tidy/abseil/DurationRewriter.h
@@ -27,7 +27,26 @@ enum class DurationScale : std::int8_t {
Microseconds,
Nanoseconds,
};
+} // namespace abseil
+} // namespace tidy
+} // namespace clang
+namespace std {
+template <> struct hash<::clang::tidy::abseil::DurationScale> {
+ using argument_type = ::clang::tidy::abseil::DurationScale;
+ using underlying_type = std::underlying_type<argument_type>::type;
+ using result_type = std::hash<underlying_type>::result_type;
+
+ result_type operator()(const argument_type &arg) const {
+ std::hash<underlying_type> hasher;
+ return hasher(static_cast<underlying_type>(arg));
+ }
+};
+} // namespace std
+
+namespace clang {
+namespace tidy {
+namespace abseil {
/// Given a `Scale`, return the appropriate factory function call for
/// constructing a `Duration` for that scale.
llvm::StringRef getFactoryForScale(DurationScale Scale);
OpenPOWER on IntegriCloud