roboforum.ru

Технический форум по робототехнике.
Текущее время: 23 ноя 2024, 07:56

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 15:04 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
GCC компилятор анализирует варнинги и веселости кода в зависимости от уровня оптимизации.
Очень весело его было заставлять делать даную фичу "gcc failing to warn of uninitialized variable"
для кода:

static uint32_t CompilerWarningsTest(uint32_t input)
{
uint32_t result;

if ( input > 0 )
{
result = 10;
}

return result;
}

Но ет все лирика, грабли в том что в зависимости от включеного уровня оптимализации ( -Os/-O3 / -Of ) различается количество варнингов в коде :cry: хотя -Wall -Wextra включены.

Очень неприятно найти ет перед релизом.

Вобщем при анализе кода хорошо его гонять при разых вариантах оптимизации, как я понял некоторый анализ включается ток при использовании алгоритмов оптимизации, и на флаги варнингов оно плюет с высокой горки :(.


Последний раз редактировалось Aseris 19 июн 2018, 18:56, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 18:05 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Ничего не понял (про наезд на gcc). Но сам код глупый :)
Если input <= 0, то надо возвращать неинициированную переменную. Надо, таки, "uint32_t result" как-то инициировать, если в коде присутствуют не все проверки.
Так надо:
Код:
  if ( input > 0 )
  {
    result = 10;
  }
  else
  {
    result = 0;
  }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 18:14 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
Код специально чтоб сгенерировать ворнинг. Но gcc 6.3.1 в Attolic True Studio его генерить нехочет.


Последний раз редактировалось Aseris 19 июн 2018, 18:15, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 18:15 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
А в чем грабля-то? Ну мелкий косяк...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 18:26 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
А грабля что когдато он ет делал, плюс ет моветон что от уровня оптимизации он генерит разные варнинги. Что с учетом разношерсной команды кодописателей становится грусно. нужно MISRA чекер из начальства выбивать чтоб более мение в коде быть уверенным.

Добавлено спустя 8 минут 23 секунды:
В ту же копилку для тестов, мож кому надо, должно генерить варнинг про некоректное поведение, неработает при -Og и -O0, работает при -O3
Код:
#define A_SIZE 10

uint8_t array[A_SIZE ];


void TestFunc(void)
{
uint32_t index
for ( index = A_SIZE ; index > 0; index-- )
{
    array[index-1] = array[index-2];
}
}


Ворнинг про то что лезем мимо масива, неработает при -Og и -O0, работает при -O3
Код:
uint8_t array[A_SIZE ];

array[A_SIZE ] = 0;


Мож я конечно гдето чтото в мануале недочитал...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 18:29 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Ну, вроде, об этом косяке на всех углах кричат :)
Косяк как из неизлечимых, типа "пишите нормально программы" :)
https://gcc.gnu.org/ml/gcc-bugs/2010-12/msg00978.html
https://stackoverflow.com/questions/177 ... d-variable
http://howtucode.com/gcc-failing-to-war ... 73348.html
http://qaru.site/questions/409336/gcc-f ... d-variable


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 18:34 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
студия, гнуарм. C11 (-std=c11), оптимизация o0, ничего. меняем варнинг лэвэл с Default на Pedantic (-Wall -Wextra -Wpedantic)
Код:
1>Src\main.c(119,11): warning :  unused variable 'ii' [-Wunused-variable]
1>  uint32_t ii = CompilerWarningsTest(0);

переключаемся на og
Код:
1>Src\main.c(119,11): warning :  unused variable 'ii' [-Wunused-variable]
1>  uint32_t ii = CompilerWarningsTest(0);

:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 18:39 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
Ну грабель в том что за время проекта я даный варнинг встречал, правда проекту уже 3 года и нчинался он на IDE v 5.0 ...шас уже 9.0.1, и после обновлений верил то что существующие фичи никто трогать небудет и в выпрямление рук у сотрудников и сильно код не проверял после кром код ревю.

"пишите нормально программы" и где такой персонал дают? :beer:

Добавлено спустя 2 минуты 6 секунд:
Angel71 писал(а):
студия, гнуарм. C11 ...
:)

Все клас, :D ток оно должно варнинг дать внутри функции на uint32_t result;

unused и uninitialized разные весчи, да и к оптимизации другой паровоз варнингов относитися


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 18:43 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
а, тфу блин. ii анюсед. ну дя, не выругалось. :pardon: тады ойсь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 18:55 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
Вобщем при анализе кода хорошо его гонять при разых вариантах оптимизации, как я понял некоторый анализ включается ток при использовании алгоритмов оптимизации, и на флаги варнингов оно плюет с высокой горки :(.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 19:01 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Aseris писал(а):
как я понял некоторый анализ включается ток при использовании алгоритмов оптимизации, и на флаги варнингов оно плюет с высокой горки .

Ага, об этом говорят в моих ссылках.

Aseris писал(а):
"пишите нормально программы" и где такой персонал дают?

Да фиг его знает :)
Я все пишу с нулевым уровнем оптимизации. Если становится тесно, тогда только начинаю мучить gcc. А вообще, в последнее время - быдлокодю жестко, заработало, ну и ладно :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 19:12 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
статические анализаторы кода на подобии https://www.viva64.com/ru/pvs-studio/ подходят? на рутрекере некоторые вещи есть для попробовать.
:ROFL: варнинги и бяко-код это всё фигня. вот когда чип дерьмо глюкаво-недокументированное, вот это сила. грё mpu-9255...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 19:18 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
Статические анализаторы я и назвал MISRA чекер. Попробовать мне ненадо я с ними работал, но обычно все упирается в то что пока петух не клюнет руководство фиг деньги на лицензию даст, типа вы умные вы справитесь....но ет уже другие грабли... нужно завести скебе соглашение с рисками для руководства, и требовать подпись кровью чоб потом небыло а вы нам не говорили (по несколько раз на планерках) что без той штуки риски больше...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 19:28 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
с новыми правилами вроде с записью видео не забалуешь - и так и так подпись клянчить. ну не переживай, некоторые насяльники могут себе позволить фразы "эт ты специально чтот ломаешь, что бы потом чинить" (знакомому недавно такое выдали, сильно задумался о смене места работы).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Opensourece такой Opensourece (GCC)
СообщениеДобавлено: 19 июн 2018, 19:32 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
... мнда все еше веселеее...

Код:
...
for(i = 0; i < count; i++ )
{
   ReadNormalEvent((uint32_t)eventIndex-i, &event);
   if((event.eventNumber == eventTmp.eventNumber) && (i > 0) )
   {
     break;
   }
   memcpy( &eventTmp, &event, sizeof(Event_t) );
...
}


здесь оно в другой ветви проекта генерит варнинг

'eventTmp.eventNumber' may be used uninitialized in this function [-Wmaybe-uninitialized]

но блин проверочную функцию (из шапки) игнорит..
Осваивать чели багтрекер GCC :cry: ....


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO