реклама на сайте
подробности

 
 
> Баг EWARM 5.20.3
MALLOY2
сообщение Jan 5 2009, 21:17
Сообщение #1


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



EWARM 5.20.3 EVAL. Компилирую под STM32 ну это не важно...
Обнаружил баг, прошу проверить.

Баг проявляется при попытке выполнить условие с битовым полем.

Имеем:
Код
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;


Делаем такое условие:
Код
void main(void)
{
  my_struct_t *test;
  ....
  if (test->C){......}
}

Все нормально компилируеться

При таком условии
Код
void main(void)
{
  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. Чтение - запись битовых полей работает нормально.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Jan 6 2009, 11:39
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Я за то чтобы в таких случаях компилер ругался и не доходил до линковки!
Хотя ошибку он выдаёт дурацкую. Возможно компилер немного не доработан.

Цитата(MALLOY2)
но на 100% копилирован

Тупым компилятором. Чтобы потом юзер в рантайме встал на эти грабли. Типа Data Abort. ИАР слишком умный для таких граблей. Если бы Вы хоть чуть умели писать компилеры и понимали методы оптимизации, а не только умели писать такие кривые проги, то не говорили бы что этот код 100% компилируемый.

Сообщение отредактировал GetSmart - Jan 6 2009, 11:42


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 6 2009, 12:31
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(GetSmart @ Jan 6 2009, 13:39) *
Я за то чтобы в таких случаях компилер ругался и не доходил до линковки!
А что же он, по-вашему, делает?
Цитата
Internal Error:
После Error линковка не производится, ибо не создается объектный файл.
Цитата(GetSmart @ Jan 6 2009, 13:39) *
Хотя ошибку он выдаёт дурацкую. Возможно компилер немного не доработан.
Если читать документацию внимательно, то в ней сказано (и из названия ошибки следует), что Internal Error - внутреняя ошибка (бага) компилятора. В этом случае надо отправлять баг-репорт в IAR:
Цитата
INTERNAL ERROR
An internal error is a diagnostic message that signals that there has been a serious and unexpected failure due to a fault in the compiler. It is produced using the following form:
Internal error: message
where message is an explanatory message. If internal errors occur, they should be reported to your software distributor or IAR Technical Support. Include information enough to reproduce the problem, typically:
● The product name
● The version number of the compiler, which can be seen in the header of the list files
generated by the compiler
● Your license number
● The exact internal error message text
● The source file of the program that generated the internal error
● A list of the options that were used when the internal error occurred.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MALLOY2   Баг EWARM 5.20.3   Jan 5 2009, 21:17
- - GetSmart   Разная оптимизация влияет на ошибку? И ещё хотело...   Jan 5 2009, 23:08
- - MALLOY2   Глюк проявляется только при высокой оптимизации и ...   Jan 6 2009, 09:38
- - GetSmart   Цитата(MALLOY2)да нету там ничего test присваивает...   Jan 6 2009, 10:36
- - MALLOY2   Вот вы пристали что там, да нет там ничего вобще ...   Jan 6 2009, 11:13
- - Rst7   ЦитатаВ этом случае надо отправлять баг-репорт в I...   Jan 6 2009, 12:57
|- - rezident   Цитата(Rst7 @ Jan 6 2009, 17:57) Рекоменд...   Jan 6 2009, 14:15
|- - Сергей Борщ   Цитата(rezident @ Jan 6 2009, 16:15) Фирм...   Jan 6 2009, 14:31
|- - rezident   Цитата(Сергей Борщ @ Jan 6 2009, 19:31) Н...   Jan 6 2009, 15:30
- - MALLOY2   ЦитатаТупым компилятором. Чтобы потом юзер в ранта...   Jan 6 2009, 13:29
|- - GetSmart   Цитата(MALLOY2 @ Jan 6 2009, 19:29) 1. Ду...   Jan 6 2009, 16:05
- - MALLOY2   ЦитатаЛибо сами создайте минимальный проект с мини...   Jan 6 2009, 21:07


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 10:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016