Обнаружил баг, прошу проверить.
Баг проявляется при попытке выполнить условие с битовым полем.
Имеем:
Код
typedef struct my_struct_bit_tag
{
unsigned int bit0:1;
unsigned int bit1:1;
unsigned int bit2:1;
unsigned int bit3:1;
unsigned int bit4:1;
unsigned int bit5:1;
unsigned int bit6:1;
unsigned int bit7:1;
unsigned int other:24;
}my_struct_bit_t;
typedef struct my_struct_tag
{
volatile unsigned int A;
volatile unsigned int B;
union {volatile my_struct_bit_t Cbit; volatile unsigned int C;};
}my_struct_t;
{
unsigned int bit0:1;
unsigned int bit1:1;
unsigned int bit2:1;
unsigned int bit3:1;
unsigned int bit4:1;
unsigned int bit5:1;
unsigned int bit6:1;
unsigned int bit7:1;
unsigned int other:24;
}my_struct_bit_t;
typedef struct my_struct_tag
{
volatile unsigned int A;
volatile unsigned int B;
union {volatile my_struct_bit_t Cbit; volatile unsigned int C;};
}my_struct_t;
Делаем такое условие:
Код
void main(void)
{
my_struct_t *test;
....
if (test->C){......}
}
{
my_struct_t *test;
....
if (test->C){......}
}
Все нормально компилируеться
При таком условии
Код
void main(void)
{
my_struct_t *test;
....
if (test->Cbit.bit0){......}
}
{
my_struct_t *test;
....
if (test->Cbit.bit0){......}
}
имеем:
Internal Error: [symbol_lookup_M31]: symbol not found for mode 1 (backend generating) (P0: 0, P1: 0)
P.S. Чтение - запись битовых полей работает нормально.