Файл подавления дезинфицирующего средства неопределенного поведения: не удалось проанализировать подавления

После компиляции приложения с помощью clang 3.6 с использованием -fsanitize=undefined я пытаюсь запустить инструментальную программу, используя файл подавления, чтобы игнорировать некоторые из ошибок:

UBSAN_OPTIONS="suppressions=ubsan.supp" ./app.exe

Файл подавления ubsan.supp содержит:

signed-integer-overflow:example.c

Это приводит к сообщению об ошибке:

UndefinedBehaviorSanitizer: failed to parse suppressions

То же самое происходит со сборкой gcc 4.9. Единственная документация, которую я могу найти, это http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html, которая предназначена для clang 3.9, в то время как я использую 3.6 (в которой нет документации по ubsan).

Кто-нибудь может предоставить рабочие примеры для файлов UBSAN подавления, которые работают в Clang 3.6?

Изменить: Просматривая исходный код UBSAN, я обнаружил, что единственным допустимым типом подавления может быть "vptr_check" - не знаю, какую версию я смотрел, хотя. Кто-нибудь может подтвердить, что в clang 3.9 доступно больше типов подавления?

1 ответ

Я не тратил время, чтобы выяснить, какие именно подавления были доступны в clang-3.6, но похоже, что в clang-3.7 только vptr_check доступно как подавление. Начиная в clang-3.8список подавлений определяется как список проверок, плюс vptr_check, В clang-3.9 доступные проверки:

  • "Неопределенные"
  • "ноль"
  • "Криво-указатель использование"
  • "Выравнивание"
  • "Объект-размер"
  • "Зарегистрирован целочисленное переполнение"
  • "Беззнаковое целое число, переполнение"
  • "Целочисленное деление на ноль"
  • "Поплавкового деление на ноль"
  • "Сдвиг-база"
  • "Сдвиг-показатель"
  • "оценка"
  • "Недостижим"
  • "вернуть"
  • "Вл переплет"
  • "Поплавок-CAST-перелив"
  • "BOOL"
  • "Перечисление"
  • "Функция"
  • "Возвращает-ненулевой-атрибут"
  • "Ненулевой-атрибут"
  • "Vptr"
  • "CFI"
  • "Vptr_check"

Я попробовал это, создав три файла, compile.sh, main.cpp а также suppressions.supp как показано ниже. unsigned-integer-overflow не является частью undefined Вот почему это должно быть включено конкретно. Это работает на моей машине с Clang-3.9.

Итак, я думаю, больше типов подавления действительны в clang-3.9,

# compile.sh
set -x 
UBSAN_OPTIONS=suppressions=suppressions.supp:print_stacktrace=1 #:help=1
export UBSAN_OPTIONS
clang++-3.9 -g -std=c++11 -fsanitize=undefined -fno-omit-frame-pointer -fsanitize=unsigned-integer-overflow main.cpp
./a.out

// main.cpp
#include <bits/stdc++.h>
#include <bits/stl_tree.h>
using namespace std;
int main(int argc, char **argv) {
  unsigned int k = UINT_MAX;
  k += 1;
  return 0;
}

# suppressions.supp
unsigned-integer-overflow:main.cpp
Другие вопросы по тегам