public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-7503] waccess: Remove visited bitmap and stop on EDGE_ABNORMAL
@ 2022-03-05 11:22 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2022-03-05 11:22 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:dab41c9d9fabe86bdc65d97ba1c1e898488d4810

commit r12-7503-gdab41c9d9fabe86bdc65d97ba1c1e898488d4810
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Sat Mar 5 12:20:47 2022 +0100

    waccess: Remove visited bitmap and stop on EDGE_ABNORMAL
    
    On Fri, Mar 04, 2022 at 02:58:37PM +0100, Jakub Jelinek via Gcc-patches wrote:
    > On Thu, Mar 03, 2022 at 05:08:30PM -0700, Martin Sebor wrote:
    > > > 1) shouldn't it give up for EDGE_ABNORMAL too?  I mean, e.g.
    > > >     following a non-local goto forced edge from a noreturn call
    > > >     to a non-local label (if there is just one) doesn't seem
    > > >     right to me
    > >
    > > Possibly yes.  I can add it but I don't have a lot of experience with
    > > these bits so if you can suggest a test case to exercise this that
    > > would be helpful.
    >
    > Something like:
    > void
    > foo (void)
    > {
    >   __label__ l;
    >   __attribute__((noreturn)) void bar (int x) { if (x) goto l; __builtin_trap (); }
    >   bar (0);
    > l:;
    > }
    > shows a single EDGE_ABNORMAL from the bar call.
    > But it would need tweaking for the ptr use and clobber.
    >
    > > > 2) if EDGE_DFS_BACK is computed and 1) is done, is there any
    > > >     reason why you need 2 levels of protection, i.e. the EDGE_DFS_BACK
    > > >     check as well as the visited bitmap (and having them use
    > > >     very different answers, if EDGE_DFS_BACK is seen, the function
    > > >     will return false, if visited bitmap has a bb, it will return true)?
    > > >     Can't the visited bitmap go away?
    > >
    > > Possibly.  As I said above, I don't have enough experience with these
    > > bits to make (and test) the changes quickly, or enough bandwidth to
    > > come up to speed on them.  Please feel free to make these improvements.
    >
    > I'll change that if it passes testing.
    
    Here is a patch to do both.  I don't think we really need to have a testcase
    for the EDGE_ABNORMAL case (Martin, feel free to add it later), abnormal
    edges simply aren't normal control flow and what exactly it means varies.
    
    2022-03-05  Jakub Jelinek  <jakub@redhat.com>
    
            * gimple-ssa-warn-access.cc (pass_waccess::use_after_inval_p): Remove
            visited bitmap and its use.  Also punt on EDGE_ABNORMAL edges.

Diff:
---
 gcc/gimple-ssa-warn-access.cc | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access.cc
index b519712d76e..b5f9e4c2f9e 100644
--- a/gcc/gimple-ssa-warn-access.cc
+++ b/gcc/gimple-ssa-warn-access.cc
@@ -3812,20 +3812,15 @@ pass_waccess::use_after_inval_p (gimple *inval_stmt, gimple *use_stmt,
       /* Proceed only when looking for uses of dangling pointers.  */
       auto gsi = gsi_for_stmt (use_stmt);
 
-      auto_bitmap visited;
-
       /* A use statement in the last basic block in a function or one that
 	 falls through to it is after any other prior clobber of the used
 	 variable unless it's followed by a clobber of the same variable. */
       basic_block bb = use_bb;
       while (bb != inval_bb
 	     && single_succ_p (bb)
-	     && !(single_succ_edge (bb)->flags & (EDGE_EH|EDGE_DFS_BACK)))
+	     && !(single_succ_edge (bb)->flags
+		  & (EDGE_EH | EDGE_ABNORMAL | EDGE_DFS_BACK)))
 	{
-	  if (!bitmap_set_bit (visited, bb->index))
-	    /* Avoid cycles. */
-	    return true;
-
 	  for (; !gsi_end_p (gsi); gsi_next_nondebug (&gsi))
 	    {
 	      gimple *stmt = gsi_stmt (gsi);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-03-05 11:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-05 11:22 [gcc r12-7503] waccess: Remove visited bitmap and stop on EDGE_ABNORMAL Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).