From patchwork Wed May 30 13:57:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 27563 Received: (qmail 61399 invoked by alias); 30 May 2018 13:57:14 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 61389 invoked by uid 89); 30 May 2018 13:57:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=gdbserver, HContent-Transfer-Encoding:8bit X-HELO: mx1.redhat.com Received: from mx3-rdu2.redhat.com (HELO mx1.redhat.com) (66.187.233.73) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 30 May 2018 13:57:11 +0000 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 79D855BCBE for ; Wed, 30 May 2018 13:57:10 +0000 (UTC) Received: from localhost.localdomain (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2B9B27D4FD for ; Wed, 30 May 2018 13:57:10 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [pushed] Mark END_CATCH as ATTRIBUTE_NORETURN (-Wmaybe-uninitialized warnings) Date: Wed, 30 May 2018 14:57:09 +0100 Message-Id: <20180530135709.2677-1-palves@redhat.com> MIME-Version: 1.0 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 * common/common-exceptions.h (exception_rethrow): Use ATTRIBUTE_NORETURN. --- gdb/ChangeLog | 5 +++++ gdb/common/common-exceptions.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0a730c88f9..c38ff5b14a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2018-05-30 Pedro Alves + + * common/common-exceptions.h (exception_rethrow): Use + ATTRIBUTE_NORETURN. + 2018-05-29 Simon Marchi * breakpoint.c (print_solib_event, check_status_catch_solib): diff --git a/gdb/common/common-exceptions.h b/gdb/common/common-exceptions.h index 15c85e28ab..e873f9d061 100644 --- a/gdb/common/common-exceptions.h +++ b/gdb/common/common-exceptions.h @@ -146,7 +146,7 @@ extern int exceptions_state_mc_catch (struct gdb_exception *, int); #if GDB_XCPT != GDB_XCPT_SJMP extern void *exception_try_scope_entry (void); extern void exception_try_scope_exit (void *saved_state); -extern void exception_rethrow (void); +extern void exception_rethrow (void) ATTRIBUTE_NORETURN; #endif /* Macro to wrap up standard try/catch behavior.