LLVM: эквивалент Wno-ignored-qualifiers?

#gcc #llvm #clang

#gcc #llvm #лязг

Вопрос:

В GCC, когда -Wall -Wextra флаги включены, есть возможность отключить предупреждения, такие как следующие с помощью -Wno-ignored-qualifiers :

 warning: 'const' type qualifier on return type has no effect
  

Есть ли какой-либо способ добиться такого же поведения с LLVM / Clang? Я погуглил, но нашел только несколько страниц, связанных с исправлением, о том, как была добавлена эта функция сообщения об ошибках. Ничего о том, как это отключить.

Я использую LLVM amp; Clang версии 3.0 (сборка из исходных текстов SVN).

Примечание: Я собирался опубликовать это в SuperUser, но там нет ни одного вопроса о Clang, и тега LLVM тоже нет, так что это меня немного обескуражило. Если этот вопрос все равно должен быть там, не стесняйтесь переместить его.

[Редактировать]Кажется, опция распознается, когда я запускаю свой Makefile из терминала. Однако при запуске из Eclipse (Helios) он не распознается.

[Решение] Найдено. По-видимому, проблема заключалась в том, что Eclipse (под Ubuntu) запускается root. Почему это так, я понятия не имею, но эффект заключается в том, что переменная $ PATH содержит то, что было бы у root, вместо того, что было бы у пользователя, запускающего Eclipse. Таким образом, Eclipse использовала более старую общесистемную версию Clang (2.80). Добавление правильной переменной PATH в свойства проекта -> Сборка C / C -> Среда исправило это.

Комментарии:

1. Я думаю, что это подходящий сайт S. E. для такого типа вопросов.

Ответ №1:

Какую версию Clang вы используете? -Wno-ignored-qualifiers работает для меня:

 % clang -Wall -Wextra -c foo.c
foo.c:1:1: warning: 'const' type qualifier on return type has no effect
      [-Wignored-qualifiers]
const int foo();
^~~~~
1 warning generated.
% clang -Wall -Wextra -Wno-ignored-qualifiers -c foo.c
%
  

В общем, вы можете посмотреть на .td файлы, которые выполняют довольно приятную работу по сбору всех диагностических данных. (В документах Clang есть задача по автоматической генерации документации с помощью tblgen, но это еще не было сделано.)

В этом случае, например, вы видите в DiagnosticSemaKinds.td :

 def warn_qual_return_type : Warning< 
  "'%0' type qualifier%s1 on return type %plural{1:has|:have}1 no effect">,
  InGroup<IgnoredQualifiers>, DefaultIgnore;
  

который показывает, в какой диагностической группе он находится ( IgnoredQualifiers ). Затем вы можете заглянуть в, DiagnosticGroups.td чтобы увидеть, что IgnoredQualifiers вызывается в командной строке:

 def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
  

Так -Wno-ignored-qualifiers и есть. Clang пытается быть совместимым с GCC везде, где это возможно, поэтому использование имени GCC для чего-либо обычно, скорее всего, сработает.

Комментарии:

1. @николас-райли клэнг версии 3.0 (магистраль 127980). Только что заметил кое-что очень странное, в терминале опция работает, в Eclipse — нет.

2. Тогда звучит как ошибка в Eclipse.

3. Да, я искал, но ничего не могу найти об этом. Довольно раздражает, теперь мне приходится отключать -Wall, иначе я получаю около 120 предупреждений, и из-за этого я не вижу интересных ошибок. Ну что ж…

4. что касается ЗАДАЧИ, я над ней работаю 🙂 Первая часть завершена (улучшение диагностики), и я скоро начну работать над второй частью… Я делаю это в свободное время, так что вам, возможно, придется подождать месяц или два.

5. @Matthieu: Приятно знать. Удачи 🙂