Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Enze Li via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Cc: enze.li@gmx.com, tdevries@suse.de
Subject: [PATCH] gdb: Fix -Wuninitialied issue
Date: Tue, 12 Sep 2023 16:22:49 +0800	[thread overview]
Message-ID: <OS3P286MB21527F155CDDA3DCFCAA6F29F0F1A@OS3P286MB2152.JPNP286.PROD.OUTLOOK.COM> (raw)

I see the following warning when building GDB on FreeBSD/amd64 with
Clang 14,

======================================================================
  CXX    mdebugread.o
mdebugread.c:1069:3: error: variable 'f' is uninitialized when used here [-Werror,-Wuninitialized]
                f->set_loc_enumval (tsym.value);
                ^
mdebugread.c:836:17: note: initialize the variable 'f' to silence this warning
        struct field *f;
                       ^
                        = nullptr
======================================================================

after digging a little, I realized that we can not simply do what
Clang 14 says.

The root cause of this issue is that we lost the initialization of
the variable 'f' in this commit,

  commit 2774f2dad5f05e68771c07df6ab0fb23baa2118e
  Date:   Thu Aug 31 09:37:44 2023 +0200

      [gdb/symtab] Factor out type::{alloc_fields,copy_fields}

we have made these modifications,

----------------------------------------------------------------------
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -1034,9 +1034,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,

        t->set_code (type_code);
        t->set_length (sh->value);
-       t->set_num_fields (nfields);
-       f = ((struct field *) TYPE_ALLOC (t, nfields * sizeof (struct field)));
-       t->set_fields (f);
+       t->alloc_fields (nfields, false);
----------------------------------------------------------------------

The problem is that the variable 'f' is used in the second half of
parse_symbol, that's why Clang complained.

To fix this issue we need to ensure that the varibale 'f' is
initialized.  Calling the fields method is an obvious way to fix this
issue.

Tested on FreeBSD/amd64 by rebuilding.
---
 gdb/mdebugread.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index ea3e15be53b2..9cb30ce0acd0 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -1035,6 +1035,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
 	t->set_code (type_code);
 	t->set_length (sh->value);
 	t->alloc_fields (nfields);
+	f = t->fields();
 
 	if (type_code == TYPE_CODE_ENUM)
 	  {

base-commit: 318d3bda5cad124bd11eebb0349d0f183ba625b1
-- 
2.41.0


             reply	other threads:[~2023-09-12  8:24 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-12  8:22 Enze Li via Gdb-patches [this message]
2023-09-12  9:09 ` Tom de Vries via Gdb-patches
2023-09-12  9:11   ` Tom de Vries via Gdb-patches
2023-09-12 13:42     ` Enze Li via Gdb-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=OS3P286MB21527F155CDDA3DCFCAA6F29F0F1A@OS3P286MB2152.JPNP286.PROD.OUTLOOK.COM \
    --to=gdb-patches@sourceware.org \
    --cc=enze.li@gmx.com \
    --cc=enze.li@hotmail.com \
    --cc=tdevries@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox