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).
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.
--
Federico Serafini, M.Sc.
Software Engineer, BUGSENG (http://bugseng.com)