11-10-2023, 07:17 AM
Hi!
Rule A6-4-1 says:
Rule A6-4-1 (required, implementation, automated)
A switch statement shall have at least two case-clauses, distinct from
the default label.
What is the definition of a "case-clause"? Is it a "case-clause label", or a "case-clause block of code"?
Our static analyzer is warning about this code:
It warns because there is only one case "block of code" (doSomething), and it expects that there are at least 2 (distinct from default case). It then wants us to rewrite the code in a much less readable way, like:
Is our static analyzer correct in warning A6-4-1 in the above code?
Please note: A6-4-1 inherits from HIC++ HIC++ v4.0 [9]: 6.1.4, which is more explicit than AUTOSAR, claiming that "at least two case labels" are needed. There's a big difference between "label" and "block".
Furthermore, consider the documentation from Perforce about HIC++ 6.1.4:
https://www.perforce.com/resources/qac/h...statements
There, they claim that the following code is compliant (while not being compliant in AUTOSAR):
Why should AUTOSAR change the meaning of the HIC++ rule?
Thanks!
Rule A6-4-1 says:
Rule A6-4-1 (required, implementation, automated)
A switch statement shall have at least two case-clauses, distinct from
the default label.
What is the definition of a "case-clause"? Is it a "case-clause label", or a "case-clause block of code"?
Our static analyzer is warning about this code:
Code:
void foo(int i)
{
switch(i)
{
case 3:
case 7:
case 12:
case 25:
doSomething();
break;
default:
doSomethingElse();
break;
}
}
It warns because there is only one case "block of code" (doSomething), and it expects that there are at least 2 (distinct from default case). It then wants us to rewrite the code in a much less readable way, like:
Code:
if (i == 3 || i == 7 || i == 12 || i == 25)
{
doSomething();
}
else
{
doSomethingElse()
}
Is our static analyzer correct in warning A6-4-1 in the above code?
Please note: A6-4-1 inherits from HIC++ HIC++ v4.0 [9]: 6.1.4, which is more explicit than AUTOSAR, claiming that "at least two case labels" are needed. There's a big difference between "label" and "block".
Furthermore, consider the documentation from Perforce about HIC++ 6.1.4:
https://www.perforce.com/resources/qac/h...statements
There, they claim that the following code is compliant (while not being compliant in AUTOSAR):
Code:
// @@+ Compliant: 2 case labels distinct from the default label +@@
switch (i)
{
case 0:
case 1:
doSomething ();
break;
default:
doSomethingElse ();
break;
}
Why should AUTOSAR change the meaning of the HIC++ rule?
Thanks!