[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN PATCH] automation/eclair: extend deviations of MISRA C:2012 Rule 16.3
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. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |