TypeSanitizer — Clang 22.0.0git 文档

主要观点:介绍了 TypeSanitizer 这一严格类型别名违规检测器,包括其算法、构建方法、使用方式、特性及当前状态等方面。
关键信息

  • 由编译器工具模块和运行时库组成,可捕捉违反严格别名规则的情况。
  • 算法通过生成描述符表和使用阴影内存来检查类型别名。
  • 构建需用 CMake 启用compiler-rt运行时。
  • 使用时需添加特定编译和链接标志,可通过环境变量调整输出。
  • 有多种属性和列表用于控制和忽略部分检测。
  • 存在一些局限性,如内存使用、编译时间增加等。
    重要细节
  • C/C++有基于类型的别名规则,LLVM 可利用这些进行优化。
  • 描述符表以 comdat 形式存在,通过指针值快速检查类型匹配。
  • 运行时使用 8 字节阴影内存记录类型信息。
  • 可通过__has_feature等属性根据是否启用 TypeSanitizer 执行不同代码。
  • 存在忽略列表可抑制特定文件或函数的别名违规报告。
  • 目前与其他 sanitizer 不能同时运行。
  • 仍在开发中,存在一些已知问题和改进计划。
阅读 13
0 条评论