fa.netbsd.tech.kern
[Top] [All Lists]

Re: __dead functions

Subject: Re: __dead functions
From: "Valeriy E. Ushakov" <uwe@xxxxxxxxxx>
Date: Fri, 18 Jul 2008 15:39:44 UTC
Newsgroups: fa.netbsd.tech.kern

On Fri, Jul 18, 2008 at 17:51:13 +0300, Alexander Shishkin wrote:

> > So, from a quick look either this hunk is not necessary at all or it
> > should be replaced with an assertion.
> Or maybe an assertion can be placed right before __NOTREACHED?

It's better to fold the assertion into __NOTREACHED, as Jason suggests
in another followup, though I'd probably made that conditional on
DIAGNOSTIC.   


> > This should be protected with GCC_PREREQ I guess.
> Ok.
> +#if __GNUC_PREREQ__(4, 3)

gcc treats an infinite loop as "notreached" marker for quite some
time, may be even since gcc3.x, I don't remember.


#if __GNUC_PREREQ__(4, 0)       /* XXX: which version? */
#define __MARK_NOTREACHED for (;;) continue
#else
#define __MARK_NOTREACHED do {} while (/* CONSTCOND */ 0)
#define

#if defined(DIAGNOSTIC)
#define __NOTREACHED do {
        panic("%s:%d: %s reached NOTREACHED code", __func__, FILE, LINE);
        __MARK_NOTREACHED;
    } while (/* CONSTCOND */ 0)
#else
#define __NOTREACHED __MARK_NOTREACHED
#endif


PS: I wonder if do {} while (/* CONSTCOND */ 0) placeholder deserves a
canned macro.  We seem to use it quite a bit under ifdef __lint__ or
!DEBUG cases.

-uwe

<Prev in Thread] Current Thread [Next in Thread>