https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121301

            Bug ID: 121301
           Summary: Errors in system includes when compiling with -O3
                    -fkeep-inline-functions -Werror=maybe-uninitialized
           Product: gcc
           Version: 15.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: alessandro.vergani at argo dot vision
  Target Milestone: ---

Whan compiling a very simple file that only includes `format`, like this:

===
#include <format>
===

and passing to g++ -std=c++20 -O3 -fkeep-inline-functions
-Werror=maybe-uninitialized it produces the following error.
Compiling with -O2 or without -fkeep-inline-functions works as expected

===

$ g++ -O3 -std=c++20 -Werror=maybe-uninitialized -fkeep-inline-functions
test.cpp
In file included from /opt/gcc-15/include/c++/15.1.0/format:61,
                 from test.cpp:1:
In function 'constexpr int std::__unicode::__v16_0_0::__field_width(char32_t)',
    inlined from 'constexpr int
std::__unicode::__v16_0_0::_Grapheme_cluster_view<_View>::_Iterator::width()
const [with _View = std::basic_string_view<wchar_t>]' at
/opt/gcc-15/include/c++/15.1.0/bits/unicode.h:846:24,
    inlined from 'constexpr std::size_t
std::__unicode::__truncate(std::basic_string_view<_CharT>&, std::size_t) [with
_CharT = wchar_t]' at /opt/gcc-15/include/c++/15.1.0/bits/unicode.h:993:30:
/opt/gcc-15/include/c++/15.1.0/bits/unicode.h:610:5: error:
'*(std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> > >::_Iterator*)((char*)&__gc +
offsetof(std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> >
>,std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> >
>::<unnamed>)).std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t>
>::_Iterator::std::__unicode::__v16_0_0::_Grapheme_cluster_iterator_base.std::__unicode::__v16_0_0::_Grapheme_cluster_iterator_base::_M_c'
may be used uninitialized [-Werror=maybe-uninitialized]
  610 |     if (__c < __width_edges[0]) [[likely]]
      |     ^~
/opt/gcc-15/include/c++/15.1.0/bits/unicode.h: In function 'constexpr
std::size_t std::__unicode::__truncate(std::basic_string_view<_CharT>&,
std::size_t) [with _CharT = wchar_t]':
/opt/gcc-15/include/c++/15.1.0/bits/unicode.h:990:57: note:
'*(std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> > >::_Iterator*)((char*)&__gc +
offsetof(std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> >
>,std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> >
>::<unnamed>)).std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t>
>::_Iterator::std::__unicode::__v16_0_0::_Grapheme_cluster_iterator_base.std::__unicode::__v16_0_0::_Grapheme_cluster_iterator_base::_M_c'
was declared here
  990 |       _Grapheme_cluster_view<basic_string_view<_CharT>> __gc(__s);
      |                                                         ^~~~
In function 'constexpr int std::__unicode::__v16_0_0::__field_width(char32_t)',
    inlined from 'constexpr int
std::__unicode::__v16_0_0::_Grapheme_cluster_view<_View>::_Iterator::width()
const [with _View = std::basic_string_view<wchar_t>]' at
/opt/gcc-15/include/c++/15.1.0/bits/unicode.h:846:24,
    inlined from 'constexpr std::size_t
std::__unicode::__field_width(std::basic_string_view<_CharT>) [with _CharT =
wchar_t]' at /opt/gcc-15/include/c++/15.1.0/bits/unicode.h:975:30:
/opt/gcc-15/include/c++/15.1.0/bits/unicode.h:610:5: error:
'*(std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> > >::_Iterator*)((char*)&__gc +
offsetof(std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> >
>,std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> >
>::<unnamed>)).std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t>
>::_Iterator::std::__unicode::__v16_0_0::_Grapheme_cluster_iterator_base.std::__unicode::__v16_0_0::_Grapheme_cluster_iterator_base::_M_c'
may be used uninitialized [-Werror=maybe-uninitialized]
  610 |     if (__c < __width_edges[0]) [[likely]]
      |     ^~
/opt/gcc-15/include/c++/15.1.0/bits/unicode.h: In function 'constexpr
std::size_t std::__unicode::__field_width(std::basic_string_view<_CharT>) [with
_CharT = wchar_t]':
/opt/gcc-15/include/c++/15.1.0/bits/unicode.h:972:57: note:
'*(std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> > >::_Iterator*)((char*)&__gc +
offsetof(std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> >
>,std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t,
std::char_traits<wchar_t> >
>::<unnamed>)).std::__unicode::__v16_0_0::_Grapheme_cluster_view<std::basic_string_view<wchar_t>
>::_Iterator::std::__unicode::__v16_0_0::_Grapheme_cluster_iterator_base.std::__unicode::__v16_0_0::_Grapheme_cluster_iterator_base::_M_c'
was declared here
  972 |       _Grapheme_cluster_view<basic_string_view<_CharT>> __gc(__s);
      |                                                         ^~~~
cc1plus: some warnings being treated as errors

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/gcc-15/libexec/gcc/x86_64-pc-linux-gnu/15.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../sources/configure --prefix=/opt/gcc-15 --disable-multilib
--enable-languages=c,c++
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 15.1.0 (GCC)

Reply via email to