On 14.02.2024 12:27, Federico Serafini wrote: > On 14/02/24 09:28, Jan Beulich wrote: >> On 13.02.2024 23:33, Stefano Stabellini wrote: >>> Signed-off-by: Stefano Stabellini <stefano.stabell...@amd.com> >>> --- >>> docs/misra/rules.rst | 6 ++++++ >>> 1 file changed, 6 insertions(+) >>> >>> diff --git a/docs/misra/rules.rst b/docs/misra/rules.rst >>> index c185366966..931158b354 100644 >>> --- a/docs/misra/rules.rst >>> +++ b/docs/misra/rules.rst >>> @@ -181,6 +181,12 @@ maintainers if you want to suggest a change. >>> headers (xen/include/public/) are allowed to retain longer >>> identifiers for backward compatibility. >>> >>> + * - `Rule 5.5 >>> <https://gitlab.com/MISRA/MISRA-C/MISRA-C-2012/Example-Suite/-/blob/master/R_05_05.c>`_ >>> + - Required >>> + - Identifiers shall be distinct from macro names >>> + - Clashes between function-like macros and non-callable entities >>> + are allowed. The pattern #define x x is also allowed. >> >> Just for me to know what exactly is covered (hence also a question >> to Roberto as to [to be] implemented Eclair behavior): Even when >> the above would be sufficient (and imo better) people frequently >> write >> >> #define a(x, y) b(x, y) >> >> which, transformed to the specific case here, would then be >> >> #define a(x, y) a(x, y) >> >> I'd assume such ought to also be covered, but that's not clear >> from the spelling above. > > I list what happens in some different situations, > then we can find the right words for the documentation and/or > refine the configuration: > > If you > #define x x > and then use `x' as identifier, > the resulting violation is deviated (allowed pattern). > > If you > #define a(x, y) a(x, y) > and then use `a' as identifier for a non-callable entity, > the resulting violation is deviated (no clash with non-callable > entities). > If you use identifier `a' for a callable entity, the resulting violation > is reported: the allowed pattern covers only macros expanding to their > own name, in this case the macro name is considered to be > `a' only, not a(x, y). > > If you > #define a(x, y) b(x, y) > and then use `a' as identifier for a non-callable entity, > the resulting violation is deviated (no clash with non-callable > entities).
I'm afraid I don't see what violation there is in this case, to deviate. As a result I'm also not sure I correctly understand the rest of your reply. > If you use `a' as identifier for a callable entity, > this is not a violation because after the preprocessing phase, > identifier `a' no longer exists. > > As far as I know, this is what was agreed upon in one of the recent > MISRA meetings. That was my fear (of being what I'd call a wrong [insufficient] interpretation of what was meant). Jan