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

 
 
 
Reply to this topicStart new topic
> Глюк оптимизатора ИАР МСП в.3.30а, при "Function inlining"
VAI
сообщение Aug 15 2005, 09:45
Сообщение #1


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Нашел ошибку оптимизатора при установленой оптимизации "Function inlining"
Пример и как обойти.
Чтоб не загружать топик все написал во вложеном файле.
Прикрепленные файлы
Прикрепленный файл  gluck_inline.txt ( 5.88 килобайт ) Кол-во скачиваний: 133
 


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
ig_z
сообщение Aug 15 2005, 14:07
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



И еще один баг
Пример на базе исходников scmRTOS

Имеем классы

Код
class TCritSec
{
public:
   TCritSec () : StatusReg(__get_interrupt_state()) { __disable_interrupt(); }
   ~TCritSec() { __set_interrupt_state(StatusReg); }

private:
   istate_t StatusReg;
};


   class TEventFlag
   {
       enum TValue { efOn = 1, efOff= 0 }; // prefix 'ef' means: "Event Flag"

   public:
       void Clear() { TCritSec cs; Value = efOff; }

   private:
       TValue Value;
   };


TEventFlag evFlag1;
TEventFlag evFlag2;


Если в встречаются две критические секции подряд, то оптимизатор соершенно справедливо пытается их объединить.

evFlag1.Clear();
evFlag2.Clear();

Но подавив деструктор cs в evFlag1, оптимизатор забывает подавить контруктор cs в evFlag2.
В результате прерывания гарантированно запрещены после evFlag2.Clear();
Go to the top of the page
 
+Quote Post

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

 


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


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