From 71c05bb8e2b7585f459b702cc1b55efe9892cc3d Mon Sep 17 00:00:00 2001 From: Immad Mir Date: Wed, 6 Jul 2022 21:35:53 +0530 Subject: 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 --- gcc/analyzer/sm-fd.cc | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'gcc/analyzer') diff --git a/gcc/analyzer/sm-fd.cc b/gcc/analyzer/sm-fd.cc index 4058ac5..8196d33 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; }; -- cgit v1.1