This is the mail archive of the gdb-patches@sources.redhat.com 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]

[RFA] infrun.c:handle_inferior_event() tiny simplification (was "Re: [RFA/patch] handle_inferior_event() extract some code into a separate function")


> gcc -c -g -O2 ... -Werror /home/kettenis/sandbox/virgin-gdb/src/gdb/infrun.c
> cc1: warnings being treated as errors
> /home/kettenis/sandbox/virgin-gdb/src/gdb/infrun.c: In function `handle_inferior_event':
> /home/kettenis/sandbox/virgin-gdb/src/gdb/infrun.c:1337: warning: `real_stop_pc' might be used uninitialized in this function

Thanks to Mark, I looked closer to this variable. It turns out that
this variable is very locally used in two blocks of the function,
vis:

void
handle_inferior_event (struct execution_control_state *ecs)
{
  [...]
  if ([test for subroutine call])\
    {
      [...]
      real_stop_pc = skip_language_trampoline (stop_pc);
      if (real_stop_pc == 0)
        real_stop_pc = SKIP_TRAMPOLINE_CODE (stop_pc);
      if (real_stop_pc != 0)
        ecs->stop_func_start = real_stop_pc;
      [...]
      return;
    }
  [...]
  if (IN_SOLIB_RETURN_TRAMPOLINE (stop_pc, ecs->stop_func_name))
    {
      /* Determine where this trampoline returns.  */
      real_stop_pc = SKIP_TRAMPOLINE_CODE (stop_pc);

      /* Only proceed through if we know where it's going.  */
      if (real_stop_pc)
        {
          [...]
          sr_sal.pc = real_stop_pc;
          [...]
          return;
        }
    }
  [...]
}

So the real mistake I made was to make real_stop_pc a parameter
of the new function I introduced. It should have been a local
variable to that function.

Here is what I suggest:

  1. A patch to makes it more obvious that this variable is only
     locally used by defining it only inside these if blocks.
     Patch attached.

  2. Send an updated version of the patch I backed out where
     real_stop_pc is local variable to the new function, rather
     than a parameter (that was completely foolish since we don't
     even use the value that was passed and was not set in any case)
 
Here is the first patch:

2004-01-03  J. Brobecker  <brobecker@gnat.com>

        * infrun.c (handle_inferior_event): Move the declaration of
        real_stop_pc inside the if blocks where it is used.

OK to apply? Tested on x86-linux with GCC 3.2.3, no warning, and
no regression.

-- 
Joel

Attachment: infrun.c.diff
Description: Text document


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