binutils-gdb/gdb/common
Pedro Alves f7c6f42310 Mark END_CATCH as ATTRIBUTE_NORETURN (-Wmaybe-uninitialized warnings)
This commit fixes a set of -Wmaybe-uninitialized warnings in GDB and
GDBserver, seen with GCC 7.3.1 on F27 at -O2.  Specifically, all of
these:

 src/gdb/breakpoint.c:5040:4: warning: ‘e’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 src/gdb/cli/cli-cmds.c:277:71: warning: ‘tracker’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 src/gdb/cli/cli-cmds.c:302:22: warning: ‘word’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 src/gdb/gdbserver/server.c:1895:7: warning: ‘result’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 src/gdb/gdbserver/server.c:1966:7: warning: ‘result’ may be used uninitialized in this function [-Wmaybe-uninitialized]

For example, looking at one of the gdbserver ones in more detail:

 ../../../src/gdb/gdbserver/server.c: In function ‘int handle_qxfer_btrace_conf(const char*, gdb_byte*, const gdb_byte*, ULONGEST, LONGEST)’:
 ../../../src/gdb/gdbserver/server.c:1966:7: warning: ‘result’ may be used uninitialized in this function [-Wmaybe-uninitialized]
	if (result != 0)
	^~

In this case (like the others), the 'result' variable is assigned in
both TRY and CATCH blocks:

      TRY
        {
          result = target_read_btrace_conf (thread->btrace, &cache);
          if (result != 0)
            memcpy (own_buf, cache.buffer, cache.used_size);
        }
      CATCH (exception, RETURN_MASK_ERROR)
        {
          sprintf (own_buf, "E.%s", exception.message);
          result = -1;
        }
      END_CATCH

      if (result != 0)
        return -3;

so it would seem like the warning is bogus.

However, END_CATCH is really a catch block in disguise, and that path
indeed does not initialize the variable:

#define END_CATCH				\
    catch (...)					\
      {						\
	exception_rethrow ();			\
      }						\
  }

exception_rethrow does not return normally (it rethrows the current
exception after running cleanups), but the compiler can not see that.
If it could return normally, then indeed 'result' could be used
uninitialized if the TRY block threw some non-gdb exception, which
would be caught by END_CATCH.

The fix it to let the compiler know that the exception_rethrow does
not return normally, using ATTRIBUTE_NORETURN.

gdb/ChangeLog:
2018-05-30  Pedro Alves  <palves@redhat.com>

	* common/common-exceptions.h (exception_rethrow): Use
	ATTRIBUTE_NORETURN.
2018-05-30 14:18:47 +01:00
..
agent.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
agent.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
array-view.h Add selftests for range_contains and insert_into_bit_range_vector 2018-04-09 15:47:12 -04:00
ax.def Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
break-common.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
btrace-common.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
btrace-common.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
buffer.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
buffer.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
byte-vector.h Make target_read_alloc & al return vectors 2018-04-07 13:19:12 -04:00
cleanups.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
cleanups.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
common-debug.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
common-debug.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
common-defs.h Create new common/pathstuff.[ch] 2018-02-28 11:34:39 -05:00
common-exceptions.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
common-exceptions.h Mark END_CATCH as ATTRIBUTE_NORETURN (-Wmaybe-uninitialized warnings) 2018-05-30 14:18:47 +01:00
common-gdbthread.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
common-inferior.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
common-regcache.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
common-regcache.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
common-types.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
common-utils.c aarch64: PR 19806: watchpoints: false negatives + PR 20207 contiguous ones 2018-05-04 22:26:46 +02:00
common-utils.h aarch64: PR 19806: watchpoints: false negatives + PR 20207 contiguous ones 2018-05-04 22:26:46 +02:00
common.host Add common/ dir in build directories 2018-02-19 09:37:24 +00:00
common.m4 Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
create-version.sh Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
def-vector.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
default-init-alloc.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
diagnostics.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
enum-flags.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
environ.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
environ.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
errors.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
errors.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
fileio.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
fileio.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
filestuff.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
filestuff.h Remove do_closedir_cleanup 2018-05-04 12:20:37 -06:00
format.c Make format_pieces recognize the \e escape sequence 2018-05-17 13:06:11 -04:00
format.h Make format_pieces recognize the \e escape sequence 2018-05-17 13:06:11 -04:00
function-view.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_assert.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_locale.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_optional.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_ref_ptr.h Introduce ref_ptr::new_reference 2018-04-30 11:33:11 -06:00
gdb_setjmp.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_signals.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_splay_tree.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_string_view.h Add gdb::string_view 2018-04-09 14:20:46 -04:00
gdb_string_view.tcc Add gdb::string_view 2018-04-09 14:20:46 -04:00
gdb_sys_time.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_tilde_expand.c Create new common/pathstuff.[ch] 2018-02-28 11:34:39 -05:00
gdb_tilde_expand.h Create new common/pathstuff.[ch] 2018-02-28 11:34:39 -05:00
gdb_unique_ptr.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_unlinker.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
gdb_vecs.c Remove free_char_ptr_vec 2018-03-02 23:22:10 -05:00
gdb_vecs.h Remove const_char_ptr typedef 2018-05-29 08:52:55 -06:00
gdb_wait.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
hash_enum.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
host-defs.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
job-control.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
job-control.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
mingw-strerror.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
new-op.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
observable.h Convert observers to C++ 2018-03-19 09:37:49 -06:00
offset-type.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
pathstuff.c Conditionally include "<windows.h>" on common/pathstuff.c (and unbreak build on mingw*) 2018-03-02 07:32:31 -05:00
pathstuff.h Make gdbserver work with filename-only binaries 2018-02-28 11:37:10 -05:00
poison.h Introduce obstack_new, poison other "typed" obstack functions 2018-05-20 21:06:36 -04:00
posix-strerror.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
preprocessor.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
print-utils.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
print-utils.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
ptid.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
ptid.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
queue.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
refcounted-object.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
rsp-low.c Get rid of VEC(static_tracepoint_marker_p) 2018-03-22 00:27:19 -04:00
rsp-low.h Get rid of VEC(static_tracepoint_marker_p) 2018-03-22 00:27:19 -04:00
run-time-clock.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
run-time-clock.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
scoped_fd.h common: add scoped_fd 2018-02-09 14:03:18 +01:00
scoped_mmap.h common: add scoped_mmap 2018-02-09 14:03:19 +01:00
scoped_restore.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
selftest.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
selftest.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
signals-state-save-restore.c gdb/common/signals-state-save-restore.c: Fix typos 2018-01-15 20:03:20 +00:00
signals-state-save-restore.h Fix regression: cannot start with LD_PRELOAD=libSegFault.so (PR gdb/18653#c7) 2018-01-05 18:26:18 +00:00
signals.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
symbol.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
tdesc.c Create xml from target descriptions 2018-04-18 20:44:39 +01:00
tdesc.h Remove xml file references from target descriptions 2018-04-18 20:49:37 +01:00
traits.h Fix copy-pasto, allocate objfile_per_bfd_storage with obstack_new 2018-05-20 23:19:35 -04:00
underlying.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
valid-expr.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
vec.c Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
vec.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
version.h Update copyright year range in all GDB files 2018-01-02 07:38:06 +04:00
x86-xstate.h gdb/x86: Handle kernels using compact xsave format 2018-05-08 18:03:46 +01:00
xml-utils.c Add xml_escape_text_append and use it 2018-03-08 18:04:46 -05:00
xml-utils.h Add xml_escape_text_append and use it 2018-03-08 18:04:46 -05:00