|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] lib: extend ASSERT()
Hi Jan,
> On 16 Feb 2022, at 09:31, Jan Beulich <jbeulich@xxxxxxxx> wrote:
>
> On 16.02.2022 10:25, Bertrand Marquis wrote:
>> Hi Jan, Julien,
>>
>>> On 15 Feb 2022, at 21:00, Julien Grall <julien@xxxxxxx> wrote:
>>>
>>> (+ Bertrand)
>>>
>>> Hi Jan,
>>>
>>> On 27/01/2022 14:34, Jan Beulich wrote:
>>>> The increasing amount of constructs along the lines of
>>>> if ( !condition )
>>>> {
>>>> ASSERT_UNREACHABLE();
>>>> return;
>>>> }
>>>> is not only longer than necessary, but also doesn't produce incident
>>>> specific console output (except for file name and line number).
>>>
>>> So I agree that this construct will always result to a minimum 5 lines.
>>> Which is not nice. But the proposed change is...
>>>
>>>> Allow
>>>> the intended effect to be achieved with ASSERT(), by giving it a second
>>>> parameter allowing specification of the action to take in release builds
>>>> in case an assertion would have triggered in a debug one. The example
>>>> above then becomes
>>>> ASSERT(condition, return);
>>>> Make sure the condition will continue to not get evaluated when just a
>>>> single argument gets passed to ASSERT().
>>>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>>>> ---
>>>> v2: Rename new macro parameter.
>>>> ---
>>>> RFC: The use of a control flow construct as a macro argument may be
>>>> controversial.
>>>
>>> indeed controversial. I find this quite confusing and not something I would
>>> request a user to switch to if they use the longer version.
>>>
>>> That said, this is mainly a matter of taste. So I am interested to hear
>>> others view.
>>>
>>> I have also CCed Bertrand to have an opinions from the Fusa Group (I
>>> suspect this will go backward for them).
>>
>> Thanks and here is my feedback in regards to Fusa here.
>>
>> Most certification standards are forbidding completely macros including
>> conditions (and quite a number are forbidding static inline with conditions).
>> The main reason for that is MCDC coverage (condition/decisions and not only
>> code line) is not possible to do anymore down to the source code and has to
>> be
>> done down to the pre-processed code.
>>
>> Out of Fusa considerations, one thing I do not like in this solution is the
>> fact that
>> you put some code as parameter of the macro (the return).
>>
>> To make this a bit better you could put the return code as parameter
>> instead of having “return CODE” as parameter.
>
> Except that it's not always "return" what you want, and hence it
> can't be made implicit.
Then having code as parameter for a macro is really not nice I think.
>
>> An other thing is that Xen ASSERT after this change will be quite different
>> from
>> any ASSERT found in other projects which could make it misleading for
>> developers.
>> Maybe we could introduce an ASSERT_RETURN macros instead of modifying the
>> behaviour of the standard ASSERT ?
>
> Along the lines of the above, this would then mean a multitude of
> new macros.
Understood then my statement of Xen having an ASSERT different from any other
known
assert still stands, this is no something I would vote for.
If you want to keep the code then maybe using ASSERT_ACTION or something like
that
and keep ASSERT being a standard assert would be a good idea.
Regards
Bertrand
>
> Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |