Reconciling Polyspace Unused Parameter and MISRA 2.2 No Dead Code Warning

5 visualizaciones (últimos 30 días)
Kier
Kier el 13 de Abr. de 2017
Respondida: Kier el 4 de Jun. de 2018
I followed the advice of Polyspace help for avoiding unused parameter warnings, i.e. void cast the parameter:
void func( char x )
{
(void)x;
/* This function doesn't use x. */
}
But this in itself creates a MISRA violation 2.2: "There shall be no dead code." for the void cast.
Short of justification, is there a way to silence both MISRA 2.2 AND Polyspace Unsed Parameter warning for those few functions over which I have no control over the prototype?
Thank you.

Respuestas (2)

Alexandre De Barros
Alexandre De Barros el 14 de Abr. de 2017
Hi,
what about using a code annotation to automatically justify the defect? In this case, the annotation is:
/* polyspace<DEFECT:UNUSED_PARAMETER:Not a defect:No action planned> */
void func( char x )
The next time the analysis is launched, the defect will still be there but will have the severity "not a defect" (and the status "not action planned"). You can even use filters in the Results List to hide it from this view.
Alex
  1 comentario
Kier
Kier el 24 de Abr. de 2017
Thank you but I was wondering if there's a way to avoid justification because, for me, justification is a last resort. A justification is an artefact that has to be reviewed and managed but I think there are so few of these that it doesn't make much difference in this particular case.
The other complication is that we have semi-automatic code generation from Rhapsody. It's possible but not straightforward to add justifications before the function body declaration.

Iniciar sesión para comentar.


Kier
Kier el 4 de Jun. de 2018
The answer is to use the following macros. This stops Polyspace raising a violation but of course is optimised away by a compiler.
/* Acknowledge and prevent Unused Parameter warning for values. */
#define UNUSED_PARAMETER_VAL(x) {if((x) != 0U){/* Do Nothing */}}
/* Acknowledge and prevent Unused Parameter warning for pointers. */
#define UNUSED_PARAMETER_PTR(x) {if((x) != NULL){/* Do Nothing */}}

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by