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

            Bug ID: 121143
           Summary: FP warning from -Waggressive-loop-optimizations
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: cobol
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tkaminsk at gcc dot gnu.org
  Target Milestone: ---

Created attachment 61894
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61894&action=edit
Preprocessed file.

When running the attached file (part of new inplace_vector testsuite), I get
following warning from -Waggressive-loop-optimizations. I have checked, and
this looks like FP to me:
```
++-v3/src/.libs
-L/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/.libs
-B/home/tkaminsk/gcc/16/x86_64-pc-linux-gnu/bin/
-B/home/tkaminsk/gcc/16/x86_64-pc-linux-gnu/lib/ -isystem
/home/tkaminsk/gcc/16/x86_64-pc-linux-gnu/include -isystem
/home/tkaminsk/gcc/16/x86_64-pc-linux-gnu/sys-include
-B/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/./libstdc++-v3/src/.libs
-fmessage-length=0 -fno-show-column -ffunction-sections -fdata-sections
-fcf-protection -mshstk -g -O2 -DLOCALEDIR="." -nostdinc++
-I/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu
-I/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include
-I/home/tkaminsk/src/gcc/libstdc++-v3/libsupc++
-I/home/tkaminsk/src/gcc/libstdc++-v3/include/backward
-I/home/tkaminsk/src/gcc/libstdc++-v3/testsuite/util
/home/tkaminsk/src/gcc/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc
-std=gnu++26 -Wabi=20 ./libtestc++.a -Wl,--gc-sections
-L/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/src/filesystem/.libs
-L/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/src/experimental/.libs
-lm -o ./from_range.exe -save-temps 
In file included from
/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/inplace_vector:44,
                 from
/home/tkaminsk/src/gcc/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc:3:
In member function ‘constexpr std::ranges::uninitialized_copy_n_result<_Iter,
_Out> std::ranges::__uninitialized_copy_n_fn::operator()(_Iter,
std::iter_difference_t<_Iter>, _Out, _Sent) const [with _Iter =
__gnu_test::forward_iterator_wrapper<int>; _Out = int*; _Sent =
std::unreachable_sentinel_t]’,
    inlined from ‘constexpr void std::inplace_vector<_Tp,
_Nm>::append_range(_Rg&&) [with _Rg = __gnu_test::test_range<int,
__gnu_test::forward_iterator_wrapper>&; _Tp = int; long unsigned int _Nm = 5]’
at
/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/inplace_vector:539,
    inlined from ‘constexpr std::inplace_vector<_Tp,
_Nm>::inplace_vector(std::from_range_t, _Rg&&) [with _Rg =
__gnu_test::test_range<int, __gnu_test::forward_iterator_wrapper>; _Tp = int;
long unsigned int _Nm = 5]’ at
/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/inplace_vector:132,
    inlined from ‘constexpr void do_test_r() [with Range =
__gnu_test::test_range<int, __gnu_test::forward_iterator_wrapper>]’ at
/home/tkaminsk/src/gcc/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc:116:
/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/ranges_uninitialized.h:347:
warning: iteration 5 invokes undefined behavior
[-Waggressive-loop-optimizations]
  347 |                  ++__ofirst, (void)++__ifirst, (void)--__n)
      |                                                ^~~~~~~~~~~
/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/ranges_uninitialized.h:346:
note: within this loop
  346 |             for (; __n > 0 && __ofirst != __olast;
      |                    ~~~~^~~
In member function ‘constexpr std::ranges::uninitialized_copy_n_result<_Iter,
_Out> std::ranges::__uninitialized_copy_n_fn::operator()(_Iter,
std::iter_difference_t<_Iter>, _Out, _Sent) const [with _Iter =
__gnu_test::forward_iterator_wrapper<short int>; _Out = int*; _Sent =
std::unreachable_sentinel_t]’,
    inlined from ‘constexpr void std::inplace_vector<_Tp,
_Nm>::append_range(_Rg&&) [with _Rg = __gnu_test::test_range<short int,
__gnu_test::forward_iterator_wrapper>&; _Tp = int; long unsigned int _Nm = 5]’
at
/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/inplace_vector:539,
    inlined from ‘constexpr std::inplace_vector<_Tp,
_Nm>::inplace_vector(std::from_range_t, _Rg&&) [with _Rg =
__gnu_test::test_range<short int, __gnu_test::forward_iterator_wrapper>; _Tp =
int; long unsigned int _Nm = 5]’ at
/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/inplace_vector:132,
    inlined from ‘constexpr void do_test_r() [with Range =
__gnu_test::test_range<short int, __gnu_test::forward_iterator_wrapper>]’ at
/home/tkaminsk/src/gcc/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc:116:
/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/ranges_uninitialized.h:347:
warning: iteration 5 invokes undefined behavior
[-Waggressive-loop-optimizations]
  347 |                  ++__ofirst, (void)++__ifirst, (void)--__n)
      |                                                ^~~~~~~~~~~
/home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/ranges_uninitialized.h:346:
note: within this loop
  346 |             for (; __n > 0 && __ofirst != __olast;

```

Reply via email to