LLVM: -Нет-игнорируемые-эквивалентные квалификаторы - PullRequest
4 голосов
/ 22 апреля 2011

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

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

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

Я использую LLVM & Clang версии 3.0 (сборка из источников SVN).

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

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

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

1 Ответ

2 голосов
/ 22 апреля 2011

Какую версию 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 есть TODO для автоматического создания документации с помощью 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 для чего-то обычно может сработать.

...