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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
With the debug info -fsanitize=address finds:
```
==1==ERROR: AddressSanitizer: stack-use-after-scope on address 0x70b7656f02f8
at pc 0x000000407967 bp 0x7ffe8488f640 sp 0x7ffe8488f638
READ of size 8 at 0x70b7656f02f8 thread T0
    #0 0x000000407966 in
std::ranges::subrange<__gnu_cxx::__normal_iterator<char*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
>, __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
(std::ranges::subrange_kind)1>::end() const
/cefs/47/477f93fd2e1aac7d0856d851_gcc-trunk-20260106/include/c++/16.0.0/bits/ranges_util.h:368
    #1 0x000000408435 in auto
std::ranges::__access::_End::operator()<std::ranges::subrange<__gnu_cxx::__normal_iterator<char*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
>, __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
(std::ranges::subrange_kind)1>&>(std::ranges::subrange<__gnu_cxx::__normal_iterator<char*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
>, __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
(std::ranges::subrange_kind)1>&) const
/cefs/47/477f93fd2e1aac7d0856d851_gcc-trunk-20260106/include/c++/16.0.0/bits/ranges_base.h:185
    #2 0x000000408435 in
std::ranges::split_view<std::ranges::subrange<__gnu_cxx::__normal_iterator<char*,
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
>, __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
(std::ranges::subrange_kind)1>, std::ranges::single_view<char>
>::_Iterator::operator++()
/cefs/47/477f93fd2e1aac7d0856d851_gcc-trunk-20260106/include/c++/16.0.0/ranges:4023
    #3 0x000000402916 in main /app/example.cpp:12
    #4 0x74b767429d8f  (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f) (BuildId:
4f7b0c955c3d81d7cac1501a2498b69d1d82bfe7)
    #5 0x74b767429e3f in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x29e3f) (BuildId:
4f7b0c955c3d81d7cac1501a2498b69d1d82bfe7)
    #6 0x000000402284 in _start (/app/output.s+0x402284) (BuildId:
784c2bc6dd1778806cc032d3ca82ec1c3ea57d04)

Address 0x70b7656f02f8 is located in stack of thread T0 at offset 760 in frame
    #0 0x000000402355 in main /app/example.cpp:7
```

The problem is the temp used for `split_view( assignment, '=' )` lifetime does
not get extended in:
```
        auto part_iter = split_view( assignment, '=' ).begin();
```
So the iterator is invalid to be accessed too.

The fix is:
```
        auto t = split_view( assignment, '=' );
        auto part_iter = t.begin();
```

Reply via email to