-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Closed
Description
I ran into an issue with fmt::sprintf, which results in unexpected warnings on Intel compilers (using intel-oneAPI 2021.4.0) together with fmt v8.0.1 (installed via conda); the same issues appear with v6.2.1 (which I started with).
The warnings can be triggered using the following trivial test case answer.cpp:
#include <iostream>
#include <fmt/printf.h>
int main()
{
// either of the two statements produce warnings
std::cout << fmt::sprintf("The answer is %g", 42.0) << std::endl;
std::cout << fmt::sprintf("The answer is %i", 42) << std::endl;
}Using Intel's new compilers, warnings are generated regardless of options
$ icpx -o answer.o -c -I/home/user/miniconda3/include answer.cpp
In file included from answer.cpp:2:
In file included from /home/home/miniconda3/include/fmt/printf.h:15:
/home/home/miniconda3/include/fmt/format.h:1783:33: warning: comparison with infinity always evaluates to false in fast floating point modes [-Wtautological-constant-compare]
return write_nonfinite(out, std::isinf(value), specs, fspecs);
^~~~~~~~~~~~~~~~~
/home/home/miniconda3/include/fmt/format.h:1989:20: note: in instantiation of function template specialization 'fmt::detail::write<char, fmt::appender, float, 0>' requested here
return detail::write(out, value, specs, locale);
^
/home/home/miniconda3/include/fmt/core.h:1469:12: note: in instantiation of function template specialization 'fmt::detail::printf_arg_formatter<fmt::appender, char>::operator()<float, 0>' requested here
return vis(arg.value_.float_value);
^
/home/home/miniconda3/include/fmt/printf.h:559:3: note: in instantiation of function template specialization 'fmt::detail::vprintf<char, fmt::basic_printf_context<fmt::appender, char>>' requested here
vprintf(buffer, to_string_view(fmt), args);
^
/home/home/miniconda3/include/fmt/printf.h:576:10: note: in instantiation of function template specialization 'fmt::vsprintf<fmt::basic_string_view<char>, char>' requested here
return vsprintf(to_string_view(fmt), fmt::make_format_args<context>(args...));
^
answer.cpp:7:23: note: in instantiation of function template specialization 'fmt::sprintf<char [17], double, char>' requested here
std::cout << fmt::sprintf("The answer is %g", 42.0) << std::endl;
^
[...]
Somewhat different issues are observed for icpc if the option Wcheck is used:
$ icpc -o answer.o -c -I/home/user/miniconda3/include -Wcheck answer.cpp
/home/user/miniconda3/include/fmt/printf.h(413): warning #2259: non-pointer conversion from "int" to "char" may lose significant bits
c = it != end ? *it : 0;
^
detected during:
instantiation of "void fmt::v8::detail::vprintf(fmt::v8::detail::buffer<Char> &, fmt::v8::basic_string_view<Char>, fmt::v8::basic_format_args<Context>) [with Char=char, Context=fmt::v8::printf_context]" at line 559
instantiation of "auto fmt::v8::vsprintf(const S &, fmt::v8::basic_format_args<fmt::v8::basic_printf_context_t<fmt::v8::type_identity_t<Char>>>)->std::__cxx11::basic_string<Char, std::char_traits<Char>, std::allocator<Char>> [with S=fmt::v8::basic_string_view<char>, Char=char]" at line 576
instantiation of "auto fmt::v8::sprintf(const S &, const T &...)->std::__cxx11::basic_string<Char, std::char_traits<Char>, std::allocator<Char>> [with S=char [17], T=<double>, Char=char]" at line 7 of "answer.cpp"
[...]
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels