From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7885) id BED053858D1E; Wed, 6 Jul 2022 16:46:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BED053858D1E MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Immad Mir To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-1539] analyzer: show close event for use_after_close diagnostic X-Act-Checkin: gcc X-Git-Author: Immad Mir X-Git-Refname: refs/heads/master X-Git-Oldrev: 9e0d5db3e04afd2d030ace4ccb5c1af5e9f05a8f X-Git-Newrev: 71c05bb8e2b7585f459b702cc1b55efe9892cc3d Message-Id: <20220706164635.BED053858D1E@sourceware.org> Date: Wed, 6 Jul 2022 16:46:35 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Jul 2022 16:46:35 -0000 https://gcc.gnu.org/g:71c05bb8e2b7585f459b702cc1b55efe9892cc3d commit r13-1539-g71c05bb8e2b7585f459b702cc1b55efe9892cc3d Author: Immad Mir Date: Wed Jul 6 21:35:53 2022 +0530 analyzer: show close event for use_after_close diagnostic This patch saves the "close" event in use_after_close diagnostic and shows it where possible. gcc/analyzer/ChangeLog: * sm-fd.cc (use_after_close): save the "close" event and show it where possible. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/fd-4.c (test_3): change the message note to conform to the changes in analyzer/sm-fd.cc (test_4): Likewise. Signed-off-by: Immad Mir Diff: --- gcc/analyzer/sm-fd.cc | 15 ++++++++++++--- gcc/testsuite/gcc.dg/analyzer/fd-4.c | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/gcc/analyzer/sm-fd.cc b/gcc/analyzer/sm-fd.cc index 4058ac53308..8196d33223a 100644 --- a/gcc/analyzer/sm-fd.cc +++ b/gcc/analyzer/sm-fd.cc @@ -454,7 +454,10 @@ public: return label_text::borrow ("opened here"); if (change.m_new_state == m_sm.m_closed) - return change.formatted_print ("closed here"); + { + m_first_close_event = change.m_event_id; + return change.formatted_print ("closed here"); + } return fd_diagnostic::describe_state_change (change); } @@ -462,11 +465,17 @@ public: label_text describe_final_event (const evdesc::final_event &ev) final override { - return ev.formatted_print ("%qE on closed file descriptor %qE here", - m_callee_fndecl, m_arg); + if (m_first_close_event.known_p ()) + return ev.formatted_print ( + "%qE on closed file descriptor %qE; %qs was at %@", m_callee_fndecl, + m_arg, "close", &m_first_close_event); + else + return ev.formatted_print ("%qE on closed file descriptor %qE", + m_callee_fndecl, m_arg); } private: + diagnostic_event_id_t m_first_close_event; const tree m_callee_fndecl; }; diff --git a/gcc/testsuite/gcc.dg/analyzer/fd-4.c b/gcc/testsuite/gcc.dg/analyzer/fd-4.c index a973704f403..c992db619e7 100644 --- a/gcc/testsuite/gcc.dg/analyzer/fd-4.c +++ b/gcc/testsuite/gcc.dg/analyzer/fd-4.c @@ -45,7 +45,7 @@ test_3 (const char *path, void *buf) { close(fd); /* {dg-message "\\(2\\) closed here"} */ read(fd, buf, 1); /* { dg-warning "'read' on closed file descriptor 'fd'" } */ - /* {dg-message "\\(3\\) 'read' on closed file descriptor 'fd' here" "" {target *-*-*} .-1 } */ + /* {dg-message "\\(3\\) 'read' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" {target *-*-*} .-1 } */ } } @@ -57,6 +57,6 @@ test_4 (const char *path, void *buf) { close(fd); /* {dg-message "\\(2\\) closed here"} */ write(fd, buf, 1); /* { dg-warning "'write' on closed file descriptor 'fd'" } */ - /* {dg-message "\\(3\\) 'write' on closed file descriptor 'fd' here" "" {target *-*-*} .-1 } */ + /* {dg-message "\\(3\\) 'write' on closed file descriptor 'fd'; 'close' was at \\(2\\)" "" {target *-*-*} .-1 } */ } }