Re: git: b40c0db6f6d6 - main - Patch up __diagused for when only one of INVARIANTS or WITNESS is defined

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Wed, 27 Apr 2022 15:59:27 UTC
On 4/27/22 8:50 AM, Mateusz Guzik wrote:
> On 4/27/22, John Baldwin <jhb@freebsd.org> wrote:
>> On 4/27/22 6:30 AM, Mateusz Guzik wrote:
>>> The branch main has been updated by mjg:
>>>
>>> URL:
>>> https://cgit.FreeBSD.org/src/commit/?id=b40c0db6f6d61ed594118d81dc691b9263a7e4d7
>>>
>>> commit b40c0db6f6d61ed594118d81dc691b9263a7e4d7
>>> Author:     Mateusz Guzik <mjg@FreeBSD.org>
>>> AuthorDate: 2022-04-27 13:29:12 +0000
>>> Commit:     Mateusz Guzik <mjg@FreeBSD.org>
>>> CommitDate: 2022-04-27 13:29:12 +0000
>>>
>>>       Patch up __diagused for when only one of INVARIANTS or WITNESS is
>>> defined
>>>
>>>       Reported by:    John F Carr<jfc@mit.edu>
>>> ---
>>>    sys/sys/systm.h | 9 ++++++---
>>>    1 file changed, 6 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/sys/sys/systm.h b/sys/sys/systm.h
>>> index f2ffa7e6b815..6ca9ee886562 100644
>>> --- a/sys/sys/systm.h
>>> +++ b/sys/sys/systm.h
>>> @@ -554,10 +554,13 @@ void _gone_in_dev(device_t dev, int major, const
>>> char *msg);
>>>    #define gone_in(major, msg)		__gone_ok(major, msg) _gone_in(major, msg)
>>>    #define gone_in_dev(dev, major, msg)	__gone_ok(major, msg)
>>> _gone_in_dev(dev, major, msg)
>>>
>>> -#if defined(INVARIANTS) || defined(WITNESS)
>>> -#define	__diagused
>>> -#else
>>> +#if !defined(INVARIANTS) && !defined(WITNESS)
>>> +#define	__diagused	__unused
>>> +#elif ((defined(INVARIANTS) && !defined(WITNESS)) || \
>>> +	(!defined(INVARIANTS) && defined(WITNESS)))
>>>    #define	__diagused	__unused
>>> +#else
>>> +#define	__diagused
>>>    #endif
>>
>> Hmm, could this just be:
>>
>> #if defined(INVARIANTS) && defined(WITNESS)
>> #define __diagused
>> #else
>> #define __diagused __unused
>> #endif
>>
> 
> it does boil down to it and if you want to make the change I'm not
> going to stand in the way, but then imo it should get a comment that
> there is no dedicated macro for invariants or witness only so some
> warnings are possibly silenced when they should not be
> 
> however, the point here is that the case of only one of these being
> defined is distinct from the rest and may warrant special treatment. I
> wanted to preserve the distinction in the, arguably hairy,
> conditional.

The other option perhaps is to split out a separate __witness_used as
I suspect the majority of __diagused cases are for INVARIANTS.  In a
few other places where I didn't want to use bare __unused I added
option-specific helpers (e.g. __usbdebug_unused).

-- 
John Baldwin