Revert "Adding support for enum class in RTC_CHECK and RTC_LOG."
This reverts commit 6b6f537e839ee32d72b69f1f6dc3747fbd12b3eb. Reason for revert: AddressSanitizer: stack-use-after-return third_party/webrtc/files/stable/webrtc/rtc_base/logging.cc:214:17 in rtc::LogMessage::~LogMessage() Original change's description: > Adding support for enum class in RTC_CHECK and RTC_LOG. > > Enum class types are by design not convertible to arithmetic types. > As a result they are currently not supported in RTC_CHECK and RTC_LOG. > The current workaround was to use something like RTC_CHECK(v1 == v2) > instead of RTC_CHECK_EQ(v1, v2). > This change adds support for any enum class type by converting it to the > underlying type. > > Bug: webrtc:10418 > Change-Id: I59e6608e6a97a4cc007c903f8e021a58d4c49ff8 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/128202 > Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> > Commit-Queue: Amit Hilbuch <amithi@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#27166} TBR=kwiberg@webrtc.org,amithi@webrtc.org Change-Id: I515087dbbebd6bf8cbebd8f9944fd61a20f758db No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:10418 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/128540 Reviewed-by: Steve Anton <steveanton@webrtc.org> Commit-Queue: Steve Anton <steveanton@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27168}
This commit is contained in:
parent
946b968111
commit
ae88f39801
@ -168,16 +168,6 @@ inline Val<CheckArgType::kVoidP, const void*> MakeVal(const void* x) {
|
||||
return {x};
|
||||
}
|
||||
|
||||
// The enum class types are not implicitly convertible to arithmetic types.
|
||||
template <
|
||||
typename T,
|
||||
typename std::enable_if<std::is_enum<T>::value &&
|
||||
!std::is_arithmetic<T>::value>::type* = nullptr>
|
||||
inline decltype(MakeVal(std::declval<typename std::underlying_type<T>::type>()))
|
||||
MakeVal(T x) {
|
||||
return {static_cast<typename std::underlying_type<T>::type>(x)};
|
||||
}
|
||||
|
||||
// Ephemeral type that represents the result of the logging << operator.
|
||||
template <typename... Ts>
|
||||
class LogStreamer;
|
||||
@ -186,18 +176,18 @@ class LogStreamer;
|
||||
template <>
|
||||
class LogStreamer<> final {
|
||||
public:
|
||||
template <typename U,
|
||||
typename std::enable_if<std::is_arithmetic<U>::value ||
|
||||
std::is_enum<U>::value>::type* = nullptr>
|
||||
template <
|
||||
typename U,
|
||||
typename std::enable_if<std::is_arithmetic<U>::value>::type* = nullptr>
|
||||
RTC_FORCE_INLINE LogStreamer<decltype(MakeVal(std::declval<U>()))> operator<<(
|
||||
U arg) const {
|
||||
return LogStreamer<decltype(MakeVal(std::declval<U>()))>(MakeVal(arg),
|
||||
this);
|
||||
}
|
||||
|
||||
template <typename U,
|
||||
typename std::enable_if<!std::is_arithmetic<U>::value &&
|
||||
!std::is_enum<U>::value>::type* = nullptr>
|
||||
template <
|
||||
typename U,
|
||||
typename std::enable_if<!std::is_arithmetic<U>::value>::type* = nullptr>
|
||||
RTC_FORCE_INLINE LogStreamer<decltype(MakeVal(std::declval<U>()))> operator<<(
|
||||
const U& arg) const {
|
||||
return LogStreamer<decltype(MakeVal(std::declval<U>()))>(MakeVal(arg),
|
||||
@ -232,18 +222,18 @@ class LogStreamer<T, Ts...> final {
|
||||
RTC_FORCE_INLINE LogStreamer(T arg, const LogStreamer<Ts...>* prior)
|
||||
: arg_(arg), prior_(prior) {}
|
||||
|
||||
template <typename U,
|
||||
typename std::enable_if<std::is_arithmetic<U>::value ||
|
||||
std::is_enum<U>::value>::type* = nullptr>
|
||||
template <
|
||||
typename U,
|
||||
typename std::enable_if<std::is_arithmetic<U>::value>::type* = nullptr>
|
||||
RTC_FORCE_INLINE LogStreamer<decltype(MakeVal(std::declval<U>())), T, Ts...>
|
||||
operator<<(U arg) const {
|
||||
return LogStreamer<decltype(MakeVal(std::declval<U>())), T, Ts...>(
|
||||
MakeVal(arg), this);
|
||||
}
|
||||
|
||||
template <typename U,
|
||||
typename std::enable_if<!std::is_arithmetic<U>::value &&
|
||||
!std::is_enum<U>::value>::type* = nullptr>
|
||||
template <
|
||||
typename U,
|
||||
typename std::enable_if<!std::is_arithmetic<U>::value>::type* = nullptr>
|
||||
RTC_FORCE_INLINE LogStreamer<decltype(MakeVal(std::declval<U>())), T, Ts...>
|
||||
operator<<(const U& arg) const {
|
||||
return LogStreamer<decltype(MakeVal(std::declval<U>())), T, Ts...>(
|
||||
|
||||
@ -248,16 +248,6 @@ inline Val<LogArgType::kLogMetadataErr, LogMetadataErr> MakeVal(
|
||||
return {x};
|
||||
}
|
||||
|
||||
// The enum class types are not implicitly convertible to arithmetic types.
|
||||
template <
|
||||
typename T,
|
||||
typename std::enable_if<std::is_enum<T>::value &&
|
||||
!std::is_arithmetic<T>::value>::type* = nullptr>
|
||||
inline decltype(MakeVal(std::declval<typename std::underlying_type<T>::type>()))
|
||||
MakeVal(T x) {
|
||||
return {static_cast<typename std::underlying_type<T>::type>(x)};
|
||||
}
|
||||
|
||||
#ifdef WEBRTC_ANDROID
|
||||
inline Val<LogArgType::kLogMetadataTag, LogMetadataTag> MakeVal(
|
||||
const LogMetadataTag& x) {
|
||||
@ -295,18 +285,18 @@ class LogStreamer;
|
||||
template <>
|
||||
class LogStreamer<> final {
|
||||
public:
|
||||
template <typename U,
|
||||
typename std::enable_if<std::is_arithmetic<U>::value ||
|
||||
std::is_enum<U>::value>::type* = nullptr>
|
||||
template <
|
||||
typename U,
|
||||
typename std::enable_if<std::is_arithmetic<U>::value>::type* = nullptr>
|
||||
RTC_FORCE_INLINE LogStreamer<decltype(MakeVal(std::declval<U>()))> operator<<(
|
||||
U arg) const {
|
||||
return LogStreamer<decltype(MakeVal(std::declval<U>()))>(MakeVal(arg),
|
||||
this);
|
||||
}
|
||||
|
||||
template <typename U,
|
||||
typename std::enable_if<!std::is_arithmetic<U>::value &&
|
||||
!std::is_enum<U>::value>::type* = nullptr>
|
||||
template <
|
||||
typename U,
|
||||
typename std::enable_if<!std::is_arithmetic<U>::value>::type* = nullptr>
|
||||
RTC_FORCE_INLINE LogStreamer<decltype(MakeVal(std::declval<U>()))> operator<<(
|
||||
const U& arg) const {
|
||||
return LogStreamer<decltype(MakeVal(std::declval<U>()))>(MakeVal(arg),
|
||||
@ -328,18 +318,18 @@ class LogStreamer<T, Ts...> final {
|
||||
RTC_FORCE_INLINE LogStreamer(T arg, const LogStreamer<Ts...>* prior)
|
||||
: arg_(arg), prior_(prior) {}
|
||||
|
||||
template <typename U,
|
||||
typename std::enable_if<std::is_arithmetic<U>::value ||
|
||||
std::is_enum<U>::value>::type* = nullptr>
|
||||
template <
|
||||
typename U,
|
||||
typename std::enable_if<std::is_arithmetic<U>::value>::type* = nullptr>
|
||||
RTC_FORCE_INLINE LogStreamer<decltype(MakeVal(std::declval<U>())), T, Ts...>
|
||||
operator<<(U arg) const {
|
||||
return LogStreamer<decltype(MakeVal(std::declval<U>())), T, Ts...>(
|
||||
MakeVal(arg), this);
|
||||
}
|
||||
|
||||
template <typename U,
|
||||
typename std::enable_if<!std::is_arithmetic<U>::value &&
|
||||
!std::is_enum<U>::value>::type* = nullptr>
|
||||
template <
|
||||
typename U,
|
||||
typename std::enable_if<!std::is_arithmetic<U>::value>::type* = nullptr>
|
||||
RTC_FORCE_INLINE LogStreamer<decltype(MakeVal(std::declval<U>())), T, Ts...>
|
||||
operator<<(const U& arg) const {
|
||||
return LogStreamer<decltype(MakeVal(std::declval<U>())), T, Ts...>(
|
||||
|
||||
@ -368,16 +368,4 @@ TEST(LogTest, Perf) {
|
||||
<< " total bytes logged: " << str.size();
|
||||
}
|
||||
|
||||
TEST(LogTest, EnumsAreSupported) {
|
||||
enum class TestEnum { kValue0 = 0, kValue1 = 1 };
|
||||
std::string str;
|
||||
LogSinkImpl<StringStream> stream(&str);
|
||||
LogMessage::AddLogToStream(&stream, LS_INFO);
|
||||
RTC_LOG(LS_INFO) << "[" << TestEnum::kValue0 << "]";
|
||||
EXPECT_NE(std::string::npos, str.find("[0]"));
|
||||
EXPECT_EQ(std::string::npos, str.find("[1]"));
|
||||
RTC_LOG(LS_INFO) << "[" << TestEnum::kValue1 << "]";
|
||||
EXPECT_NE(std::string::npos, str.find("[1]"));
|
||||
}
|
||||
|
||||
} // namespace rtc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user