diff options
author | Jakub Jelinek <jakub@redhat.com> | 2022-03-05 12:20:47 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2022-03-05 12:20:47 +0100 |
commit | dab41c9d9fabe86bdc65d97ba1c1e898488d4810 (patch) | |
tree | 8b0b058c8b2cfbfcfc3b01f44f3055b28d9c22da /gcc/fortran | |
parent | 8ea4a34bd0b0a46277b5e077c89cbd86dfb09c48 (diff) | |
download | gcc-dab41c9d9fabe86bdc65d97ba1c1e898488d4810.zip gcc-dab41c9d9fabe86bdc65d97ba1c1e898488d4810.tar.gz gcc-dab41c9d9fabe86bdc65d97ba1c1e898488d4810.tar.bz2 |
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.
Diffstat (limited to 'gcc/fortran')
0 files changed, 0 insertions, 0 deletions