Fix sometimes-uninitialized warning in gdbscm_value_address
authorSimon Marchi <simon.marchi@ericsson.com>
Thu, 21 Sep 2017 14:37:40 +0000 (16:37 +0200)
committerSimon Marchi <simon.marchi@ericsson.com>
Fri, 22 Sep 2017 08:47:19 +0000 (10:47 +0200)
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
gdb/guile/scm-value.c

index 02229bc7586098d098cd46de8f1f5f7ef8ff7477..3edc4fcbbfb90546124163fd748f3d9f0b2e0de5 100644 (file)
@@ -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.
index 0dc66302ed3f6fa3bda237d46b0e4fe0e51b8826..3732666a8897a64e9c9af6b1c46e0398f0b16971 100644 (file)
@@ -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))