Pelles C forum

Pelles C => Bug reports => Topic started by: Alessio on October 06, 2009, 04:21:07 PM

Title: switch case
Post by: Alessio on October 06, 2009, 04:21:07 PM
Hi,

please see this code:

//
#include <stdio.h>

//
int main(void)
{
    //
    int i;

//
for ( i = 0; i < 10; i++ )
{
switch ( i )
{
case 0:
case 1:
case 2:
case 5:
printf("%d is in case!\n", i);
break;

default:
printf("%d is NOT in case!\n", i);
break;
}
}

return 0;
}


Why I get this output ?

Quote0 is in case!
1 is in case!
2 is in case!
3 is in case!
4 is in case!
5 is in case!
6 is NOT in case!
7 is NOT in case!
8 is NOT in case!
9 is NOT in case!

Why 3, 4 is "in case" ?

Thanks,
Alessio.


Title: Re: switch case
Post by: AlexN on October 06, 2009, 10:22:15 PM
Quote from: Alessio on October 06, 2009, 04:21:07 PM

Why I get this output ?

Quote0 is in case!
1 is in case!
2 is in case!
3 is in case!
4 is in case!
5 is in case!
6 is NOT in case!
7 is NOT in case!
8 is NOT in case!
9 is NOT in case!

Why 3, 4 is "in case" ?

I have tried some similar cases which work correct. In your case Pelles C generate only code which checks the if the value is less then 0 or above 5 for the jump to default.  If you use 0, 1, 3 and 5 Pelles C checks also the limits and jump then over a tabelle of jumping-addresses.

I think Pelle has to look at this.
Title: Re: switch case
Post by: intuitas on October 08, 2009, 06:27:53 PM
Hi
I haven't done exhaustive testing but 0,1,2 and 5; 0,1,2 and 6; 0,1,2 and 7 all produce errors.
Every other combination I have tried seems to work correctly including 0,1,2 and 8; and 0,1,2 and 9.
If the increment is altered the "in" case sequences of 0, 1,2 and 5(6 or 7) all still produce errors.
Removal of any one of the four "in" case statements eliminates the errors - as does adding a fifth.
I defined a second integer (j) and interposed a simple assignment statement between the fourth "in" case statement and the printf - to no effect - however interposing it between any of the four "in" case statements eliminated the errors.

I dont know if any of the above helps - but it was an interesting exercise and I tried quite a few meaningless variations along the way.

Regards

Paul