From 432ae719d35c81324e01ae6bd9970cc43e69fa5e Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 21 Sep 2017 16:37:40 +0200 Subject: [PATCH] Fix sometimes-uninitialized warning in gdbscm_value_address I am getting this warning with clang: /home/emaisin/src/binutils-gdb/gdb/guile/scm-value.c:439:11: error: variable 'address' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized] if (res_val != NULL) ^~~~~~~~~~~~~~~ /home/emaisin/src/binutils-gdb/gdb/guile/scm-value.c:444:32: note: uninitialized use occurs here if (gdbscm_is_exception (address)) ^~~~~~~ /home/emaisin/src/binutils-gdb/gdb/guile/scm-value.c:439:7: note: remove the 'if' if its condition is always true if (res_val != NULL) ^~~~~~~~~~~~~~~~~~~~ /home/emaisin/src/binutils-gdb/gdb/guile/scm-value.c:427:18: note: initialize the variable 'address' to silence this warning SCM address; ^ = nullptr We can get rid of it with a small refactoring. I think it's a bit cleaner/safer to initialize address with a pessimistic value and assign it on success. Then there's no chance of using it uninitialized. If I understand correctly, the NULL check on res_val was to check whether value_addr threw, and that if value_addr returns without throwing, the result will never be NULL. If that's true, we can skip the res_val variable. Tested by running gdb.guile/*.exp locally. gdb/ChangeLog: * guile/scm-value.c (gdbscm_value_address): Initialize address, get rid of res_val. --- gdb/ChangeLog | 5 +++++ gdb/guile/scm-value.c | 9 ++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 02229bc758..3edc4fcbbf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-09-21 Simon Marchi + + * guile/scm-value.c (gdbscm_value_address): Initialize address, + get rid of res_val. + 2017-09-22 Rainer Orth * configure.nat : Add fork-inferior.o to NATDEPFILES. diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c index 0dc66302ed..3732666a88 100644 --- a/gdb/guile/scm-value.c +++ b/gdb/guile/scm-value.c @@ -421,24 +421,19 @@ gdbscm_value_address (SCM self) if (SCM_UNBNDP (v_smob->address)) { - struct value *res_val = NULL; struct cleanup *cleanup = make_cleanup_value_free_to_mark (value_mark ()); - SCM address; + SCM address = SCM_BOOL_F; TRY { - res_val = value_addr (value); + address = vlscm_scm_from_value (value_addr (value)); } CATCH (except, RETURN_MASK_ALL) { - address = SCM_BOOL_F; } END_CATCH - if (res_val != NULL) - address = vlscm_scm_from_value (res_val); - do_cleanups (cleanup); if (gdbscm_is_exception (address))