All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Young <dyoung@netbsd.org>
To: cocci@systeme.lip6.fr
Subject: [Cocci] continue statement of death?
Date: Wed, 11 Sep 2019 20:51:55 -0500	[thread overview]
Message-ID: <20190912015155.GE26691@pobox.com> (raw)

Today I built and installed Coccinelle 1.0.7 on NetBSD.

I am processing this fragment of NetBSD kernel code, `tbr_timeout.c`,

| /*
|  * tbr_timeout goes through the interface list, and kicks the drivers
|  * if necessary.
|  */
| static void
| tbr_timeout(void *arg)
| {
|         struct ifnet *ifp;
|         int active, s;
| 
|         active = 0;
|         s = splnet();
|         for (ifp = TAILQ_FIRST(&ifnet); ifp; ifp = TAILQ_NEXT(ifp, if_list)) {
|                 if (!TBR_IS_ENABLED(&ifp->if_snd))
| #if 1
|                         continue;
| #endif
|                 active++;
|                 if (!IFQ_IS_EMPTY(&ifp->if_snd) && ifp->if_start != NULL)
|                         (*ifp->if_start)(ifp);
|         }
|         splx(s);
|         if (active > 0)
|                 CALLOUT_RESET(&tbr_callout, 1, tbr_timeout, NULL);
|         else
|                 tbr_timer = 0;  /* don't need tbr_timer anymore */
| }
| 

using this semantic patch, `tailq.spatch`,

| @@
| identifier I, N;
| expression H;
| statement S;
| iterator name TAILQ_FOREACH;
| @@
| 
| - for (I = TAILQ_FIRST(H); I != NULL; I = TAILQ_NEXT(I, N)) S
| + TAILQ_FOREACH(I, H, N) S

I find that if the condition in the `#if` directive is 1, then `spatch
--sp-file tailq.spatch -o tbr_timeout.spatch tbr_timeout.c` runs for
a few minutes before running out of memory. `spatch` prints this
mysterious message when it starts:

     (ONCE) already tagged but only removed, so safe

If I turn the condition to 0, however, spatch instantaneously prints the
result with the `for (...)` clause turned to `TAILQ_FOREACH(...)`, as
expected.  I don't see the mysterious `(ONCE) ...` message.

Any ideas why `continue;` is troublesome to spatch?

Dave

-- 
David Young
dyoung@pobox.com    Urbana, IL    (217) 721-9981
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

             reply	other threads:[~2019-09-12  2:08 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-12  1:51 David Young [this message]
2019-09-12  8:27 ` [Cocci] continue statement of death? Julia Lawall
2019-09-12 13:37 ` Markus Elfring
2019-09-12 14:49   ` David Young
2019-09-12 14:51   ` Julia Lawall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190912015155.GE26691@pobox.com \
    --to=dyoung@netbsd.org \
    --cc=cocci@systeme.lip6.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.