主要观点:介绍了 TypeSanitizer 这一严格类型别名违规检测器,包括其算法、构建方法、使用方式、特性及当前状态等方面。
关键信息:
- 由编译器工具模块和运行时库组成,可捕捉违反严格别名规则的情况。
- 算法通过生成描述符表和使用阴影内存来检查类型别名。
- 构建需用 CMake 启用
compiler-rt
运行时。 - 使用时需添加特定编译和链接标志,可通过环境变量调整输出。
- 有多种属性和列表用于控制和忽略部分检测。
- 存在一些局限性,如内存使用、编译时间增加等。
重要细节: - C/C++有基于类型的别名规则,LLVM 可利用这些进行优化。
- 描述符表以 comdat 形式存在,通过指针值快速检查类型匹配。
- 运行时使用 8 字节阴影内存记录类型信息。
- 可通过
__has_feature
等属性根据是否启用 TypeSanitizer 执行不同代码。 - 存在忽略列表可抑制特定文件或函数的别名违规报告。
- 目前与其他 sanitizer 不能同时运行。
- 仍在开发中,存在一些已知问题和改进计划。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。