From 53ca414a451aa090ae4d2f5c8c181b03c7f2dd88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 6 Feb 2023 10:08:44 +0100 Subject: [PATCH] repart: silence bogus gcc warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [2/3] Compiling C object systemd-repart.p/src_partition_repart.c.o ../src/partition/repart.c: In function ‘context_open_copy_block_paths’: ../src/partition/repart.c:5194:41: warning: ‘devno’ may be used uninitialized [-Wmaybe-uninitialized] 5194 | source_fd = r = device_open_from_devnum(S_IFBLK, devno, O_RDONLY|O_CLOEXEC|O_NONBLOCK, &opened); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/partition/repart.c:5188:31: note: ‘devno’ was declared here 5188 | dev_t devno; | ^~~~~ This is with gcc-13.0.1-0.2.fc38.x86_64, -O2. I'm pretty sure the code is correct. I also tried adding some asserts where errno is used for the return value, but that didn't help. I think resolve_copy_blocks_auto() is just too long for gcc to understand. (cherry picked from commit 03f5e501b6b58cb05a275403af4a36694ff0c205) --- src/partition/repart.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/partition/repart.c b/src/partition/repart.c index 3e9fcba776..8f5c93c7c3 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -4869,11 +4869,12 @@ static int context_open_copy_block_paths( "Copying from block device node is not permitted in --image=/--root= mode, refusing."); } else if (p->copy_blocks_auto) { - dev_t devno; + dev_t devno = 0; /* Fake initialization to appease gcc. */ r = resolve_copy_blocks_auto(p->type_uuid, root, restrict_devno, &devno, &uuid); if (r < 0) return r; + assert(devno != 0); source_fd = r = device_open_from_devnum(S_IFBLK, devno, O_RDONLY|O_CLOEXEC|O_NONBLOCK, &opened); if (r < 0)