clang – 未定义的行为清理程序抑制文件:无法解析抑制

使用-fsanitize = undefined使用clang 3.6编译应用程序后,

我正在尝试启动已检测的程序,同时使用抑制文件忽略一些错误:

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中有更多抑制类型可用吗?

最佳答案 我通过创建三个文件compile.sh,main.cpp和suppressions.supp来尝试它,如下所示.无符号整数溢出不是未定义的一部分,这就是为什么需要专门包含它.这可以在我的机器上使用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
点赞