Hi Bruno,

Bruno Haible via GNU coreutils General Discussion <[email protected]>
writes:

> My coreutils CI contains a "make distcheck" step. Up to now, it was
> running on Ubuntu 22.04, with gcc 11.x as compiler. This week, due
> to last week's 3 changes to src/copy-file-data.c, there is an error.
> I can reproduce it with a gcc 11.5.0 built from source:
>
> gcc-11.5.0 -I. -I./lib -Ilib -I./lib -Isrc -I./src -Werror -Wall
> -Warith-conversion -Wbad-function-cast -Wcast-align=strict -Wdate-time
> -Wdouble-promotion -Wduplicated-branches -Wduplicated-cond -Wextra
> -Wformat-signedness -Winit-self -Winvalid-pch -Wlogical-op
> -Wmissing-declarations -Wmissing-include-dirs -Wmissing-prototypes
> -Wnested-externs -Wnull-dereference -Wold-style-definition
> -Wopenmp-simd -Woverlength-strings -Wpacked -Wpointer-arith -Wshadow
> -Wstrict-overflow -Wstrict-prototypes -Wsuggest-attribute=cold
> -Wsuggest-attribute=const -Wsuggest-attribute=format
> -Wsuggest-attribute=malloc -Wsuggest-attribute=noreturn
> -Wsuggest-attribute=pure -Wsuggest-final-methods -Wsuggest-final-types
> -Wsync-nand -Wtrampolines -Wuninitialized -Wunknown-pragmas
> -Wunsafe-loop-optimizations -Wunused-macros -Wvariadic-macros
> -Wvector-operation-performance -Wvla -Wwrite-strings -Warray-bounds=2
> -Wattribute-alias=2 -Wformat=2 -Wimplicit-fallthrough=5
> -Wshift-overflow=2 -Wunused-const-variable=2 -Wvla-larger-than=4031
> -Wswitch-enum -Wno-sign-compare -Wno-format-nonliteral -g -O2 -MT
> src/copy-file-data.o -MD -MP -MF $depbase.Tpo -c -o
> src/copy-file-data.o src/copy-file-data.c &&\
> mv -f $depbase.Tpo $depbase.Po
> src/copy-file-data.c: In function 'copy_file_data':
> src/copy-file-data.c:428:50: error: 'scan_inference.ext_start' may be used 
> uninitialized in this function [-Werror=maybe-uninitialized]
>   428 |   *hole_size += src_total_size - (last_ext_start + last_ext_len);
>       |                                  ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
> src/copy-file-data.c:530:25: note: 'scan_inference.ext_start' was declared 
> here
>   530 |   struct scan_inference scan_inference;
>       |                         ^~~~~~~~~~~~~~
> src/copy-file-data.c:345:17: error: 'scan_inference.hole_start' may be used 
> uninitialized in this function [-Werror=maybe-uninitialized]
>   345 |         ext_end = MIN (ext_end, max_ipos);
>       |                 ^
> src/copy-file-data.c:530:25: note: 'scan_inference.hole_start' was declared 
> here
>   530 |   struct scan_inference scan_inference;
>       |                         ^~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
> make[2]: *** [Makefile:13481: src/copy-file-data.o] Error 1
>
> The warning is gone with gcc 12 or newer. I'm switching the CI over to
> Ubuntu 24.04. But I nevertheless wanted to give you a notice.

Thanks for the warning. It looks similar to a bug report sent to the
GitHub mirror [1]. I came to the same conclusion as Pádraig, that
lseek_copy (*) is only called only when SEEK_HOLE is defined. And in
that case scan_inference.ext_start is always set.

(*) Your warning says the following:

> src/copy-file-data.c: In function 'copy_file_data':
> src/copy-file-data.c:428:50: error: 'scan_inference.ext_start' may be used 
> uninitialized in this function [-Werror=maybe-uninitialized]

So I guess the error names the wrong function because lseek_copy is
inlined? I never noticed that before, interesting.

Collin

[1] https://github.com/coreutils/coreutils/issues/118

Reply via email to