Перейти к содержанию
    

Не могу собрать OpenOCD. Linux Mint 19

Сергей Борщ, для gcc даже несколько вариантов комментариев есть:

/* Falls through. */
/* fall-thru */
/* Else falls through. */
/* FALLTHRU */
/* … falls through … */

Вот статья об этом: https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, one_eight_seven сказал:

Clang и ICC это тоже поддерживают? Или городить #ifdef __GNUC__, и т.п.?

Давайте не будем обобщать. Напоминаю, речь идёт о Минте, а там штатный компилятор gcc. У автора наверняка тоже используется gcc, вот для gcc и надо написать то, что он воспримет.

1 час назад, one_eight_seven сказал:

отсутствие break - это не есть неправильный код. Это задокументированная возможность языка.

С этим никто не спорит. Но отсутствие break может быть ошибкой. Если компилятор увидит в этом месте fallthrough в понятном ему виде, он удостоверится, что отсутствие break в этом месте не ошибка, и никаких варнигов выдавать не станет.

Это нужно не только компилятору, а и человеку, читающему код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Quote

Давайте не будем обобщать. Напоминаю, речь идёт о Минте

Напоминаю, речь идёт об openOCD и его сборке из исходников, а не об его установке из пакетов в Linux Mint.

Изменено пользователем one_eight_seven

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, one_eight_seven сказал:

Напоминаю, речь идёт об openOCD и его сборке из исходников, а не об его установке из пакетов в Linux Mint.

Стесняюсь спросить, кто ведет речь об установке пакета?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

40 минут назад, one_eight_seven сказал:

Напоминаю, речь идёт об openOCD и его сборке из исходников, а не об его установке из пакетов в Linux Mint.

+1.

А что при сборке старыми версиями GCC, скажем, 4.9.x? Они будут понимать новые атрибуты и комментарии? Не говоря уже о других тулчейнах.

Вообще-то по-хорошему мантайнер пакетов конкретного дистрибутива должен патчить пакет. Вот он и должен решать, что именно: Makefile или исходный код. В данном случае ТС собирает проверенный релиз. Если он начнет патчить исходники, то где гарантия что при копипасте не допустит ошибку и не изменит логику программы в этих switch? Напоминаю, что он не мантайнер, а собирает пакет для своей профильной работы. Исходя из этого, безопаснее отключить данную ошибку, переведя её в разряд предупреждений, чтобы всё-таки видеть потенциальную опасность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, andrew_b said:

Стесняюсь спросить, кто ведет речь об установке пакета? 

Полагаю, что тот, кто считает, что слова "Linux Mint" хоть что-то значат в рамках текущего разговора.

 

11 minutes ago, Grizzly said:

А что при сборке старыми версиями GCC, скажем, 4.9.x? Они будут понимать новые атрибуты и комментарии?

Ну, с комментариями-то вообще никаких проблем не будет, новый gcc их воспримет как директиву, старый - как простой комментарий, только вот старый и ворнинга на отсутствие break  не выдаст. А чтобы комментарии воспринимались (новым) gcc при обработке fallthrough, всё-равно нужно устанавливать уровень соответствующего warning'а в соответствующее значение, т.е. изменять параметры сборки. А аттрибут - неизвестно как будет воспринят.

Изменено пользователем one_eight_seven

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, one_eight_seven сказал:

Полагаю, что тот, кто считает, что слова "Linux Mint" хоть что-то значат в рамках текущего разговора.

Гхм.

Читаем саааамое начало топика:

16 часов назад, nanorobot сказал:

Перешел на линкс минт 19, до этого была 18.  Имею набор проблем, среди них  много раз ранее выполнявшаяся, и никогда не вызывавшая проблем, сборка OpenOCD.

Потом чуть далее:

3 часа назад, andrew_b сказал:

У автора темы произошёл переход на новую версию дистрибутива. Соответственно, обновился компилятор. Наверняка используется gcc. У gcc есть __attribute__((fallthrough)). Вот это и надо вписать там, где нужно, чтобы не было варнингов.

Если старый компилятор не обращал внимание на отсутствие break, то теперь обращает.

Ну и в каком месте тут установка из пакетов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, andrew_b said:

Ну и в каком месте тут установка из пакетов?

 

1 hour ago, andrew_b said:

Давайте не будем обобщать. Напоминаю, речь идёт о Минте

вкупе с предложением править исходник и отправлять в апстрим мало в каком случае имеет логичное обоснование. Пожалуй, мне трудно придумать логическое обоснование для какого-либо случая, кроме подготовки пакета для Linux Mint.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, one_eight_seven сказал:

править исходник и отправлять в апстрим мало в каком случае имеет логичное обоснование

Ну если вы никогда этого не делали, то для вас это никак не обосновать. Окей, с пониманием.

3 минуты назад, one_eight_seven сказал:

для какого-либо случая, кроме подготовки пакета для Linux Mint.

Вы понимаете, что пакет для Минт, пакет для Федоры, пакет для миллионов других дистрибутивов собирается из одних и тех же исходников? Что апстрим на то и апстрим, что он один для всех. Видимо, нет. Иначе мне непонятны ваши посты здесь.

Но в любом случае, мне надоело расписывать здесь очевидные вещи. До свидания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, one_eight_seven сказал:

А чтобы комментарии воспринимались (новым) gcc при обработке fallthrough, всё-равно нужно устанавливать уровень соответствующего warning'а в соответствующее значение, т.е. изменять параметры сборки.

Нет, не нужно, это работает из коробки. Добавление специального комментария подавляет это предупреждение в новом ГЦЦ и, как и любой другой комментарий, никак не влияет ни на старый, ни на любой другой компилятор. И поскольку исходники openOCD рано или поздно будут собираться новым ГЦЦ в любом дистрибутиве и даже для винды - это исправление нужно отправить официальным путем в исходники openOCD. Или ждать, пока это сделает кто-то другой (Царь-батюшка, правительство, дворник, сосед?) и ныть, как все плохо (это я не про конкретных людей, а так вообще, о тенденции).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цитата

Что апстрим на то и апстрим, что он один для всех. Видимо, нет. Иначе мне непонятны ваши посты здесь.

Это вы этого не понимаете. Это вы сказали, что не надо обобщать. Это вы сказали, что речь только про mint. И не надо пытаться удалиться с гордым видом и [удалено].
Именно потому что он один на всех - нельзя ставить аттрибут без обкладывания его директивами условной компиляции. Именно потому что он один для всех - надо думать и про старые gcc, и про icc, и про clang, и про винду, и про freeBSD.

Комментарии - другое дело.

Изменено пользователем Сергей Борщ
предупреждение за нарушение пункта 2.1б Правил форума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, arhiv6 сказал:

В багтрекере уже описано, в репозитории уже исправлено.

Спасибо за ссылки. Увидел, как комментарии исправляют проблему. В таком случае надо патчить исходники, с этим согласен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 11/27/2018 at 1:31 PM, nanorobot said:

Перешел на линкс минт 19, до этого была 18.  Имею набор проблем, среди них  много раз ранее выполнявшаяся, и никогда не вызывавшая проблем, сборка OpenOCD. Сейчас make завершается с ошибками:


src/svf/svf.c: In function ‘svf_read_command_from_file’:
src/svf/svf.c:663:7: error: this statement may fall through [-Werror=implicit-fallthrough=]
     i = -1;
     ~~^~~~
src/svf/svf.c:664:4: note: here
    case '\r':
    ^~~~
src/svf/svf.c:667:8: error: this statement may fall through [-Werror=implicit-fallthrough=]
     if (!cmd_pos)
        ^
src/svf/svf.c:669:4: note: here
    default:
    ^~~~~~~
cc1: all warnings being treated as errors

гугл что то по этой теме находит, но проблему решить не удается.

ЕЩЕ: сборка buildroot для платы SL-ATSAMA5D3 также завершается с ошибкой ранее не встречавшейся.
 


ACC conformance test FAILED

Догадываюсь что проблемы родственные, какие то несовместимости с новым GCC, но так бывало (со сборкой билдрут) и ранее, но совсем то  в тупик еще не заводило.

В Makefile где-то стоит опция Werror. Просто уберите ее и будет вам щастя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...