This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix sometimes-uninitialized warning in gdbscm_value_address


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=432ae719d35c81324e01ae6bd9970cc43e69fa5e

commit 432ae719d35c81324e01ae6bd9970cc43e69fa5e
Author: Simon Marchi <simon.marchi@ericsson.com>
Date:   Thu Sep 21 16:37:40 2017 +0200

    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.

Diff:
---
 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 02229bc..3edc4fc 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2017-09-21  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* guile/scm-value.c (gdbscm_value_address): Initialize address,
+	get rid of res_val.
+
 2017-09-22  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
 	* configure.nat <i386sol2,i386>: Add fork-inferior.o to NATDEPFILES.
diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c
index 0dc6630..3732666 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))


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]