-Wmaybe-uninitialized with GCC 13 and more than 15x fmt::arg
Not sure if you want to do something about this.
https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGe1wAyeAyYAHI%2BAEaYxCAAzKQADqgKhE4MHt6%2BekkpjgJBIeEsUTHxdpgOaUIETMQEGT5%2BXLaY9nkM1bUEBWGR0XG2NXUNWc0KQ93BvcX9sQCUtqhexMjsHOaxwcjeWADUJrFuVCwEAPT8xCxMBAB0CAfYJhoAgk/PwQS7V8EQc/sA7FYXrsQbsmF4iLtxsR9rEACK7Y4EEAgC5XAgQcxmLGkUF4/H406nN4E0lkglIlG1YCYsxmLg43YaBagokk8kc0mUkDU2l0xnM3EgtnAzli0Hc3lY2IClnC4mi8ViyXEGlYySyoW7EXPJXilVqukAVk1rIVur1nINfIAbKb5ezLeTrVj/vbteanRyXXSABzunVe50nKmqvkATgDnqDXJDPLDWK4GntgZjFLjUrpXAZdNxgodirTEozCaz2NzTLlqaLxeR8cN9JlFfzHsdNcRJYbUhT0fbHbrmfpJubVd77Z99LtI7mByBFpBxEwBGWDCZs7eJn%2BcI4C1onCNvD8HC0pFQnDc1msUKWK0w%2BzMsR4pGRx53CwA1iAjRobr6zL7fS4I1JF9I0zHDMwjV9fROEkQ9NF4M8OF4BQQA0Z8EIWOBYBgRAUFQFgEjoaJyEoNBCOImJgC4WJ4hoWgCGiVCIAiBDSAiYJagAT04J8OOYYguIAeQibQKhfJ9yLYQQhIYWgeNfUgsAiLxgDcMRaFQ7heCwK4jHERT8EXSoADdMC0k9MFUCoITWE8PlaNjaDwCJiG4jwsDYghiDwFheN4MziAiZJMDhTA9OAZyjEwvgDGABQADU8EwAB3ISEkYfyZEEEQxHYKRsvkJQ1DY3RmgMaLTEsax9Bc1DYGYNhUROUhApAbyvAYd85gWVAEnaLSAFoAHUrO8phdkGoTgEQwKfKwerfhaNo0hcBh3E8Rp/HWnoihKbJklSAQRiaRJDvaXa%2BhiMZWnEqoJhOvRykqAROjqS6ZmuwYukesYJg%2B/auAWBQb1WCRd33eDFKQ3ZVF9G1BptSRdmAZBkF2GibliXYIFwQgSHvR85l4F8tB60gEEwJgsBiJbP0kcMbi4f5s19SQjSkf4NH%2BSQzBgjg4NIPyuZuJH2ezKCkxtHnoKPE8kJQtCMNfLDcIgJAlgIBIIVIiByKI%2BhiFCVg1jhhGkZRtGcY6rridITB8CIea9H4HLRHEArXaKlR1EUsrSBStyEn8iGOAPUg5cQzghIhbXPlQKhYfhxHkdR9HMexiAPAow3CaBknMIWSnqf6Ja9wF3g/PArGjWAgDJC4X1w1iSD4kj09OEV9DSbfUh6cZ5nWfFyQuZ5vny9iKH5c75WydDswp6j5DZ97wKUmcSQgA%3D%3D
Gives back:
In file included from /opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:41,
from <source>:1:
In constructor 'constexpr fmt::v11::detail::named_arg_store<Context, NUM_ARGS, NUM_NAMED_ARGS, DESC>::named_arg_store(T& ...) [with T = {fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>}; Context = fmt::v11::context; int NUM_ARGS = 16; int NUM_NAMED_ARGS = 16; long long unsigned int DESC = 9223372036854775824]',
inlined from 'std::string fmt::v11::format(format_string<T ...>, T&& ...) [with T = {detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>}]' at /opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:4200:49:
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/base.h:2331:9: warning: '<anonymous>' may be used uninitialized [-Wmaybe-uninitialized]
2331 | : args{{named_args, NUM_NAMED_ARGS}, values...} {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/base.h: In function 'std::string fmt::v11::format(format_string<T ...>, T&& ...) [with T = {detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>}]':
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/base.h:2484:3: note: by argument 2 of type 'const fmt::v11::detail::named_arg_info<char>*' to 'fmt::v11::basic_format_arg<Context>::basic_format_arg(const fmt::v11::detail::named_arg_info<typename Context::char_type>*, size_t) [with Context = fmt::v11::context]' declared here
2484 | basic_format_arg(const detail::named_arg_info<char_type>* args, size_t size)
| ^~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:4200:17: note: '<anonymous>' declared here
4200 | return vformat(fmt.str, vargs<T...>{{args...}});
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASM generation compiler returned: 0
In file included from /opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:41,
from <source>:1:
In constructor 'constexpr fmt::v11::detail::named_arg_store<Context, NUM_ARGS, NUM_NAMED_ARGS, DESC>::named_arg_store(T& ...) [with T = {fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>, fmt::v11::detail::named_arg<char, int>}; Context = fmt::v11::context; int NUM_ARGS = 16; int NUM_NAMED_ARGS = 16; long long unsigned int DESC = 9223372036854775824]',
inlined from 'std::string fmt::v11::format(format_string<T ...>, T&& ...) [with T = {detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>}]' at /opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:4200:49:
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/base.h:2331:9: warning: '<anonymous>' may be used uninitialized [-Wmaybe-uninitialized]
2331 | : args{{named_args, NUM_NAMED_ARGS}, values...} {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/base.h: In function 'std::string fmt::v11::format(format_string<T ...>, T&& ...) [with T = {detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>, detail::named_arg<char, int>}]':
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/base.h:2484:3: note: by argument 2 of type 'const fmt::v11::detail::named_arg_info<char>*' to 'fmt::v11::basic_format_arg<Context>::basic_format_arg(const fmt::v11::detail::named_arg_info<typename Context::char_type>*, size_t) [with Context = fmt::v11::context]' declared here
2484 | basic_format_arg(const detail::named_arg_info<char_type>* args, size_t size)
| ^~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/fmt/trunk/include/fmt/format.h:4200:17: note: '<anonymous>' declared here
4200 | return vformat(fmt.str, vargs<T...>{{args...}});
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Execution build compiler returned: 0
Program returned: 0
Thanks for reporting. {fmt} tries to be warning-clean on -Wextra so yes, we should fix those. If you have a workaround a PR would be welcome.
@vitaut You think the fix would be like the initializer I wrote in that PR where I used const and triggered a similar warning? This change specifically: https://github.com/fmtlib/fmt/pull/4367/commits/b6be6feb16c4617f6acf5cd73e7a3a14875340b6
You think the fix would be like the initializer I wrote in that PR where I used const and triggered a similar warning?
It's possible that the same workaround would apply here.
@vitaut You think the fix would be like the initializer I wrote in that PR where I used
constand triggered a similar warning? This change specifically: b6be6fe
Do note that this commit regressed in https://github.com/fmtlib/fmt/commit/64313e915c45a2a37045e7b65015e557112dc4b6
FWIW, gcc-15 does not complain when building the reproducer. see https://godbolt.org/z/x7YsdqrvG
Also gcc-14 seems to not give warnings. I'm closing this issue as it becomes obsolete.