On Thu, 29 Feb 2024, Jan Beulich wrote:
> On 29.02.2024 09:01, Federico Serafini wrote:
> > On 28/02/24 10:06, Jan Beulich wrote:
> >> On 28.02.2024 09:53, Federico Serafini wrote:
> >>> --- a/automation/eclair_analysis/ECLAIR/deviations.ecl
> >>> +++ b/automation/eclair_analysis/ECLAIR/deviations.ecl
> >>
> >> Comments below apply similarly to text added to this file.
> >>
> >>> --- a/docs/misra/deviations.rst
> >>> +++ b/docs/misra/deviations.rst
> >>> @@ -291,7 +291,14 @@ Deviations related to MISRA C:2012 Rules:
> >>>        - Project-wide deviation; tagged as `deliberate` for ECLAIR.
> >>>   
> >>>      * - R16.3
> >>> -     - Switch clauses ending with continue, goto, return statements are 
> >>> safe.
> >>> +     - Switch clauses ending with an unconditional flow control statement
> >>> +       (i.e., continue, goto, or return) are safe.
> >>> +     - Tagged as `safe` for ECLAIR.
> >>
> >> With this edit (unmentioned in the description, btw) ...
> >>
> >>> +   * - R16.3
> >>> +     - Switch clauses ending with an if-else statement are safe if both
> >>> +       branches consist of a flow control statement (i.e., continue, 
> >>> break,
> >>> +       goto, return).
> >>
> >> ... why is it not also "ending with" here?
> > 
> > Because the allowed pattern is:
> > 
> > if ( cond )
> >   return; /* Or continue / break / goto */
> > else
> >   break;  /* Or continue / goto / return */
> > 
> > See below for more information.
> > 
> >>
> >> Also what about either situation ending with a call to a noreturn function?
> > 
> > This can be added.
> > 
> >>
> >>> @@ -307,6 +314,16 @@ Deviations related to MISRA C:2012 Rules:
> >>>        - Switch clauses ending with failure method \"BUG()\" are safe.
> >>>        - Tagged as `safe` for ECLAIR.
> >>>   
> >>> +   * - R16.3
> >>> +     - On X86, switch clauses ending generating an exception through
> >>> +       \"generate_exception()\" are safe.
> >>> +     - Tagged as `safe` for ECLAIR.
> >>
> >> This macro is limited to the emulator, so shouldn't be deviated globally.
> > 
> > Noted.
> > 
> >> Furthermore - why does the special case need mentioning here? Shouldn't
> >> it be the underlying pattern which is deviated (along the lines of the
> >> earlier ones):
> >>
> >>      if ( true )
> >>      {
> >>          ...
> >>          goto ...; /* Or break / continue / return */
> >>      }
> > 
> > This pattern that involves a compound statement for the true branch
> > is not deviated by this configuration.
> > 
> > See below for more information.
> > 
> >>
> >>> +   * - R16.3
> >>> +     - Switch clauses ending generating a parse error through
> >>> +       \"PARSE_ERR_RET()\" are safe.
> >>> +     - Tagged as `safe` for ECLAIR.
> >>
> >> Again this isn't a global scope macro, so shouldn't be deviated globally.
> > 
> > Noted.
> > 
> >> Plus it ends in "return", so ought to be covered by the earlier clause.
> >> The fact that the return is in a body of do {} while(0) shouldn't matter
> >> at all - that's purely syntactic sugar.
> > 
> > I gather from your comments/questions that you would like to deviate
> > *all* the patterns where an unintentional fall through can not happen.
> > 
> > Rule 16.3 is a purely syntactic rule, and, as a consequence,
> > in the current version of ECLAIR additional "allowed pattern" (aka
> > deviations) for that rule need to be described through AST nodes,
> > meaning that all what you consider as syntactic sugar cannot be ignored.
> > 
> > A deviation that covers all the pattern you are asking for could be
> > done, but it will result in a complex and quite long expression
> > (not easy to read and justify in front of an assessor).
> > 
> > Hence, what I am proposing is to deviate only the the simplest and
> > most readable cases, such as:
> > 
> > if ( cond )
> >    return x;
> > else
> >    return y;
> > 
> > without involving compound statements, fake do-wile and fake if
> > statements but rather deviating the macro inside of which are used
> > (as I did).
> 
> I see. Problem is that this isn't sufficient for the code we have, and
> the seemingly random deviation of certain constructs by name looks to
> me as pretty undesirable.

Yeah, I also think it is not ideal. At the same time among all options,
it is probably the best way forward (better than in-code comments or
better than leaving the violations outstanding).

I think we should go for it.

Reply via email to