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

 
 
> Баг 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
Ответов
MALLOY2
сообщение Jan 6 2009, 13:29
Сообщение #2


Знающий
****

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



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


1. Думаю вы точно не умеете их писать. Если вы умеете читать я писал что компилятор выдает честный варнинг на то что test не инициализирован ! он не имеет права запрещать мне так делать !

2. По поводу кривых прог не вам судить. По вашему я должен был выложить комерческий код сюда у которого больше 1000 строк чтобы показать этот глюк ? а не проще сделать так как я сделал ?

Если кто может послать баг репорт в IAR огромное спасибо, я его посылать не буду так как пишу по буржуйски токо "Привед медвед".

Баг не серьезный и работе никак не мешает, но вот на 2 машине когда попробыл его повторить с подключенным виглером почемуто среда еще повисла, это уже может напрягать.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 6 2009, 16:05
Сообщение #3


.
******

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



Цитата(MALLOY2 @ Jan 6 2009, 19:29) *
1. Думаю вы точно не умеете их писать. Если вы умеете читать я писал что компилятор выдает честный варнинг на то что test не инициализирован ! он не имеет права запрещать мне так делать !

2. По поводу кривых прог не вам судить. По вашему я должен был выложить комерческий код сюда у которого больше 1000 строк чтобы показать этот глюк ? а не проще сделать так как я сделал ?

1. Я не могу написать (сейчас) что-то подобное компилеру ИАРа. Нет богатого заказчика на этот проект. Но 10 лет назад написал компилер паскаля (уровня турбопаскаля) с более расширенным синтаксисом. Выдать варнинг в этой ситуации - мало! Это только ошибка первого этапа компиляции. Далее идёт оптимизатор, для которого эта ситуация должна быть фатальной и им должна быть выдана реальная ошибка, останавливающая компиляцию. И это не Internal Error (которую я назвал дурацкой). С другой стороны, компилер мог бы вообще откомпилить код по своему усмотрению. Хоть сразу выполнить условие, хоть просто пропустить его. И был бы прав в обоих случаях.

2. 1000 коммерческих строк сюда не нужно выкладывать, оставьте себе. Сюда выложить надо было только непокоцанную часть, хотя бы внутри IFа. Хотя вам видимо не дано разобраться где мухи, где котлеты. Так что если в будущем попросят выложить побольше, то не надо сразу посылать. Либо сами создайте минимальный проект с минимум строк, приводящих к аналогичной ошибке и уже весь проект выкладывайте на всеобщее обозрение.

Цитата(Сергей Борщ @ Jan 6 2009, 18:31) *
1. А что же он, по-вашему, делает?После Error линковка не производится, ибо не создается объектный файл.

2. Если читать документацию внимательно, то в ней сказано (и из названия ошибки следует), что Internal Error - внутреняя ошибка (бага) компилятора. В этом случае надо отправлять баг-репорт в IAR:

1. Правильно делает. Я и говорю, что я за то, чтобы он так делал и впредь.

2. Именно из-за того, что компилятор недоработан, он выдаёт Internal Error, а не что-то внятное-понятное.


--------------------
Заблуждаться - Ваше законное право :-)
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
- - GetSmart   Я за то чтобы в таких случаях компилер ругался и н...   Jan 6 2009, 11:39
|- - Сергей Борщ   Цитата(GetSmart @ Jan 6 2009, 13:39) Я за...   Jan 6 2009, 12:31
- - 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, 21:07


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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 22:34
Рейтинг@Mail.ru


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