(re-adding xen-devel@)

On 22.08.2023 17:09, Nicola Vetrini wrote:
> 
>>>> +         - 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?
>>
>> Nicola, please confirm.
>>
>>
> 
> This one is about case labels that are statically determined not to be 
> reachable (and hence
> saying that the code under that label is unreachable is not inaccurate) 
> because the
> controlling expression of the switch statement can never have such 
> value. An example below:
> 
> $ cat p.c
> int f(void) {
>    char c;
>    switch (c) {
>      case 260:
>        return 260;
>      case 4:
>        return 4;
>    }
> }
> 
> $ eclair_env -enable=MC3.R2.1,B.REPORT.TXT -- gcc -c p.c
> violation for rule MC3.R2.1: (required) A project shall not contain 
> unreachable code. (untagged)
> p.c:3.3-3.8: Loc #1 [culprit: `switch' statement has a controlling value 
> incompatible with labeled statement]
>    switch (c) {
>    <~~~~>
> p.c:5.14-5.16: Loc #2 [evidence: integer literal is unreachable]
>        return 260;
>               <~>
> 
> This is also true for things like
> 
> switch(sizeof(int)) {
>    case 2:
>      ...
>    case 4:
>      ...
> }

Ah yes, we certainly have quite a few of those. Not sure how to best
describe such for the doc, but what was suggested (still visible at
the top) doesn't get this across, I'm afraid,

Jan

Reply via email to