Commit 252f11f8 authored by Victor Zverovich's avatar Victor Zverovich

Fix a bogus MSVC warning about unreachable code, take 2

parent 81d56638
...@@ -740,8 +740,8 @@ class basic_parse_context : private ErrorHandler { ...@@ -740,8 +740,8 @@ class basic_parse_context : private ErrorHandler {
FMT_CONSTEXPR bool check_arg_id(unsigned) { FMT_CONSTEXPR bool check_arg_id(unsigned) {
if (next_arg_id_ > 0) { if (next_arg_id_ > 0) {
return on_error( on_error("cannot switch from automatic to manual argument indexing");
"cannot switch from automatic to manual argument indexing"), false; return false;
} }
next_arg_id_ = -1; next_arg_id_ = -1;
return true; return true;
......
...@@ -98,7 +98,23 @@ ...@@ -98,7 +98,23 @@
#ifndef FMT_THROW #ifndef FMT_THROW
# if FMT_EXCEPTIONS # if FMT_EXCEPTIONS
# define FMT_THROW(x) throw x # if FMT_MSC_VER
FMT_BEGIN_NAMESPACE
namespace internal {
template <typename Exception>
inline void do_throw(const Exception &x) {
// Silence unreachable code warnings in MSVC because these are nearly
// impossible to fix in a generic code.
volatile bool b = true;
if (b)
throw x;
}
}
FMT_END_NAMESPACE
# define FMT_THROW(x) fmt::internal::do_throw(x)
# else
# define FMT_THROW(x) throw x
# endif
# else # else
# define FMT_THROW(x) assert(false) # define FMT_THROW(x) assert(false)
# endif # endif
...@@ -1322,7 +1338,8 @@ template <typename Char, typename ErrorHandler> ...@@ -1322,7 +1338,8 @@ template <typename Char, typename ErrorHandler>
FMT_CONSTEXPR unsigned basic_parse_context<Char, ErrorHandler>::next_arg_id() { FMT_CONSTEXPR unsigned basic_parse_context<Char, ErrorHandler>::next_arg_id() {
if (next_arg_id_ >= 0) if (next_arg_id_ >= 0)
return internal::to_unsigned(next_arg_id_++); return internal::to_unsigned(next_arg_id_++);
return on_error("cannot switch from manual to automatic argument indexing"), 0; on_error("cannot switch from manual to automatic argument indexing");
return 0;
} }
struct format_string {}; struct format_string {};
...@@ -1702,7 +1719,8 @@ class width_checker: public function<unsigned long long> { ...@@ -1702,7 +1719,8 @@ class width_checker: public function<unsigned long long> {
template <typename T> template <typename T>
FMT_CONSTEXPR typename std::enable_if< FMT_CONSTEXPR typename std::enable_if<
!is_integer<T>::value, unsigned long long>::type operator()(T) { !is_integer<T>::value, unsigned long long>::type operator()(T) {
return handler_.on_error("width is not integer"), 0; handler_.on_error("width is not integer");
return 0;
} }
private: private:
...@@ -1725,7 +1743,8 @@ class precision_checker: public function<unsigned long long> { ...@@ -1725,7 +1743,8 @@ class precision_checker: public function<unsigned long long> {
template <typename T> template <typename T>
FMT_CONSTEXPR typename std::enable_if< FMT_CONSTEXPR typename std::enable_if<
!is_integer<T>::value, unsigned long long>::type operator()(T) { !is_integer<T>::value, unsigned long long>::type operator()(T) {
return handler_.on_error("precision is not integer"), 0; handler_.on_error("precision is not integer");
return 0;
} }
private: private:
...@@ -2056,8 +2075,10 @@ FMT_CONSTEXPR Iterator parse_format_specs(Iterator it, SpecHandler &&handler) { ...@@ -2056,8 +2075,10 @@ FMT_CONSTEXPR Iterator parse_format_specs(Iterator it, SpecHandler &&handler) {
} }
if (align != ALIGN_DEFAULT) { if (align != ALIGN_DEFAULT) {
if (p != it) { if (p != it) {
if (c == '{') if (c == '{') {
return handler.on_error("invalid fill character '{'"), it; handler.on_error("invalid fill character '{'");
return it;
}
it += 2; it += 2;
handler.on_fill(c); handler.on_fill(c);
} else ++it; } else ++it;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment