> After your patch does behavior change when trying to break on a line
> with a return stmt inside a debugger?

Note that every patch in the series was tested against GDB too, so hopefully 
this would have been caught...  But the answer is no, see lower_gimple_return:

  /* Generate a goto statement and remove the return statement.  */
 found:
  /* When not optimizing, make sure user returns are preserved.  */
  if (!optimize && gimple_has_location (stmt))
    DECL_ARTIFICIAL (tmp_rs.label) = 0;
  t = gimple_build_goto (tmp_rs.label);
  /* location includes block.  */
  gimple_set_location (t, gimple_location (stmt));
  gsi_insert_before (gsi, t, GSI_SAME_STMT);
  gsi_remove (gsi, false);

So the label, the goto and its location are all preserved:

(gdb) b ops.adb:11
Breakpoint 1 at 0x40308e: file ops.adb, line 11.
(gdb) run
Starting program: /home/eric/gnat/test_ops_okovb 

Breakpoint 1, ops.both_ok (a=..., b=...) at ops.adb:11
11               return True;      -- # ok

(gdb) b ops.adb:14
Breakpoint 1 at 0x4030c1: file ops.adb, line 14.
(gdb) run
Starting program: /home/eric/gnat/test_ops_okovb 

Breakpoint 1, ops.both_ok (a=..., b=...) at ops.adb:14
14               return False;     -- # ko

(gdb) b ops.adb:19
Breakpoint 1 at 0x403115: file ops.adb, line 19.
(gdb) run
Starting program: /home/eric/gnat/test_ops_okovb 

Breakpoint 1, ops.both_ok (a=..., b=...) at ops.adb:19
19               return False; -- # ov

-- 
Eric Botcazou

Reply via email to