mirror of
https://github.com/cc65/cc65.git
synced 2025-01-10 19:29:45 +00:00
Fixed array subscript with a bit-field with patch by kugelfuhr.
This commit is contained in:
parent
77c6a6a693
commit
8111946731
@ -3001,8 +3001,9 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef)
|
||||
}
|
||||
|
||||
if (!AddDone) {
|
||||
if (ED_IsLocQuasiConst (&Expr2) &&
|
||||
rscale == 1 &&
|
||||
if (ED_IsLocQuasiConst (&Expr2) &&
|
||||
!IsTypeBitField (Expr2.Type) &&
|
||||
rscale == 1 &&
|
||||
CheckedSizeOf (rhst) == SIZEOF_CHAR) {
|
||||
/* Change the order back */
|
||||
RemoveCode (&Mark);
|
||||
|
39
test/val/bug2186.c
Normal file
39
test/val/bug2186.c
Normal file
@ -0,0 +1,39 @@
|
||||
/* Bug #2186 - Wrong array indexing when index comes from bit-field */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
unsigned failures;
|
||||
|
||||
typedef struct {
|
||||
char flag : 1;
|
||||
char index : 7;
|
||||
} weird_type;
|
||||
|
||||
const char array[] = { '6', '5', '0', '2' };
|
||||
|
||||
weird_type data;
|
||||
|
||||
int main(void) {
|
||||
data.flag = 1;
|
||||
|
||||
data.index = 0;
|
||||
if (array[data.index] != array[0])
|
||||
{
|
||||
++failures;
|
||||
printf("Got '%c', expected '%c'\n", array[data.index], array[0]);
|
||||
}
|
||||
|
||||
data.index = 1;
|
||||
if (array[data.index] != array[1])
|
||||
{
|
||||
++failures;
|
||||
printf("Got '%c', expected '%c'\n", array[data.index], array[1]);
|
||||
}
|
||||
|
||||
if (failures > 0)
|
||||
{
|
||||
printf("Failures: %u\n", failures);
|
||||
}
|
||||
|
||||
return failures;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user