gcc 9.2.1 with -flto shows a maybe-uninitialized warning for index_pos
in builtin/pack-objects.c's add_object_entry().  Tracking it down,
the variable should be initialized in pack_objects.c's packlist_find().

The return value of locate_object_entry_hash(), which becomes index_pos,
is either (in case of found = 1) the position where the (already included)
OID is, or (in case of found = 0), index_pos is the position where the
(not yet included) OID will be after insertion (which takes place in
packlist_alloc() if the hash table is still large enough).

However, packlist_find() does not invoke locate_object_entry_hash() if
the index size is zero (which might be the case on the first run).
This is the only case where index_pos is undefined; and it is irrelevant
since the first run will increase the size of the hash table to 1024 and
then the undefined value index_pos is ignored.

This patch sets index_pos to zero on the first run to silence the warning.

Signed-off-by: Stephan Beyer <s-be...@gmx.net>
---
 pack-objects.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/pack-objects.c b/pack-objects.c
index 52560293b6..726147a75d 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -74,8 +74,11 @@ struct object_entry *packlist_find(struct packing_data 
*pdata,
        uint32_t i;
        int found;

-       if (!pdata->index_size)
+       if (!pdata->index_size) {
+               if (index_pos)
+                       *index_pos = 0; /* silence uninitialized warning */
                return NULL;
+       }

        i = locate_object_entry_hash(pdata, oid, &found);

--
2.23.0.43.g31ebfd7ae6.dirty

Reply via email to