[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] docs/misra: add exceptions to rules
On 22.08.2023 03:40, Stefano Stabellini wrote: > On Mon, 21 Aug 2023, Jan Beulich wrote: >> On 19.08.2023 03:24, Stefano Stabellini wrote: >>> @@ -106,7 +107,23 @@ maintainers if you want to suggest a change. >>> * - `Rule 2.1 >>> <https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite/-/blob/master/R_02_01_1.c>`_ >>> - Required >>> - A project shall not contain unreachable code >>> - - >>> + - The following are allowed: >>> + - Invariantly constant conditions (e.g. while(0) { S; }) >> >> When (and why) was this decided? The example given looks exactly like what >> Misra wants us to not have. > > This covers things like: > > if (IS_ENABLED(CONFIG_HVM)) > > which could resolve in if (0) in certain configurations. I think we gave > feedback to Roberto that we wanted to keep this type of things as is. Ah, I see. But then perhaps mention that rather than plain 0 here? See below as to whether a complete list of excepted constructs is wanted. >>> + - Switch with a controlling value incompatible with labeled >>> + statements >> >> What does this mean? > > I am not certain about this one actually. It could be when we have: > > switch (var) { > case 1: > something(); > break; > case 2: > something(); > break; > } > > and var could be 3 in theory? That would be a unhandled value, but no unreachable code. >>> + - Unreachability caused by the following macros/functions is >>> + deliberate: BUG, assert_failed, ERROR_EXIT, ERROR_EXIT_DOM, >>> + PIN_FAIL, __builtin_unreachable, panic, do_unexpected_trap, >>> + machine_halt, machine_restart, machine_reboot, >>> + ASSERT_UNREACHABLE >> >> Base infrastructure items like BUG() are imo fine to mention here. But >> specific items shouldn't be; the more we mention here, the more we invite >> the list to be grown. Note also how you mention items which no longer >> exist (ERROR_EXIT{,_DOM}, PIN_FAIL). > > The question is whether we want this list to be exhaustive (so we want > to mention everything for which we make an exception) or only an example > (in which case just BUG is fine.) > > Let's say we only mention BUG. Where should we keep the exhaustive list? > Is it OK if it only lives as an ECLAIR config file under > automation/eclair_analysis? There is another very similar question > below. First and foremost we need to have a single place where everything is recorded, or where at least a pointer exists to where further details are. As to this being the Eclair config file: Shouldn't any such constructs rather be listed in the deviations file, such that e.g. cppcheck can also benefit? > BTW I think both options are OK. > > If we only mention BUG, we are basically saying that as a general rule > only BUG is an exception. Then we have a longer more detailed list for > ECLAIR because in practice things are always complicated. > > On the other hand if we have the full list here, then the documentation > is more precise, but it looks a bit "strange" to see such a detailed > list in this document and also we need to make sure to keep the list > up-to-date. Thing is: This list shouldn't grow very long anyway, and also better would grow / change much over time. >>> @@ -167,7 +184,7 @@ maintainers if you want to suggest a change. >>> * - `Rule 5.6 >>> <https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite/-/blob/master/R_05_06.c>`_ >>> - Required >>> - A typedef name shall be a unique identifier >>> - - >>> + - BOOLEAN, UINT{8,32,64} and INT{8,32,64} are allowed >> >> I think this permission needs to be limited as much as possible. > > Maybe we should take this out completely given that they should be > limited to efi and acpi code that is excepted anyway I would favor that, yes. >>> @@ -183,7 +200,10 @@ maintainers if you want to suggest a change. >>> * - `Rule 7.1 >>> <https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite/-/blob/master/R_07_01.c>`_ >>> - Required >>> - Octal constants shall not be used >>> - - >>> + - Usage of the following constants is safe, since they are given >>> + as-is in the inflate algorithm specification and there is >>> + therefore no risk of them being interpreted as decimal constants: >>> + ^0(007|37|070|213|236|300|321|330|331|332|333|334|335|337|371)$ >> >> This is a very odd set of exceptions, which by stating them here you then >> grant to be exercised everywhere. Once again I don't think special cases >> dealing with a single source or sub-component should be globally named. > > Actually I agree with you there. The problem is where to put them. safe.json? > Right now we have docs/misra/rules.rst with the list of accepted rules > and their special interpretations by Xen Project. We also have the > ECLAIR configuration under automation/eclair_analysis with a bunch of > ECLAIR specific config files. > > Is it OK if the constants above only live under > automation/eclair_analysis and nowhere else? Or should we have another > rst document under docs/misra for special cases dealing with a single > source? As per above, I think putting anything in Eclair's config file should only ever be a last resort. Wherever possible we should try to put stuff in files which aren't tool specific. Where necessary special tool settings can then be (machine-)derived from there. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |