From daf634c44e2714c7525e6c552c5a5adc87cba887 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 28 Feb 2021 23:21:27 -0800 Subject: [PATCH] Pacify --enable-gcc-warnings -flto -fanalyzer MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit With GCC 10.2.1, ‘./configure --enable-gcc-warnings CFLAGS='-O2 -flto -fanalyzer' issued a false alarm about uninitialized variable use. Pacify GCC by using a variant of the code. * src/buffer.c (zip_program): Omit last placeholder entry. (n_zip_programs): New constant. (find_zip_program): Use it instead of placeholder. (first_decompress_program): Set *PSTATE to maximum value if skipping the table. This avoids confusing gcc -flto into thinking *PSTATE is used uninitialized. (next_decompress_program): Simplify now that *PSTATE is maximal when skipping. --- src/buffer.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index a5e74de7..433cb594 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -328,15 +328,15 @@ static struct zip_program zip_program[] = { { ct_lzop, LZOP_PROGRAM, "--lzop" }, { ct_xz, XZ_PROGRAM, "-J" }, { ct_zstd, ZSTD_PROGRAM, "--zstd" }, - { ct_none } }; +enum { n_zip_programs = sizeof zip_program / sizeof *zip_program }; static struct zip_program const * find_zip_program (enum compress_type type, int *pstate) { int i; - for (i = *pstate; zip_program[i].type != ct_none; i++) + for (i = *pstate; i < n_zip_programs; i++) { if (zip_program[i].type == type) { @@ -353,6 +353,8 @@ first_decompress_program (int *pstate) { struct zip_program const *zp; + *pstate = n_zip_programs; + if (use_compress_program_option) return use_compress_program_option; @@ -369,8 +371,6 @@ next_decompress_program (int *pstate) { struct zip_program const *zp; - if (use_compress_program_option) - return NULL; zp = find_zip_program (archive_compression_type, pstate); return zp ? zp->program : NULL; } -- 2.47.3