clang - Clang 断言失败:用尽源位置
问题描述
我有一个使用 Clang 的 LibTooling 框架来解析 AST 并执行静态代码分析的实用程序。我正在使用 LLVM 和 Clang v10.0。
最近我观察到该实用程序从未完成对特定文件的 AST 的解析。在调试时,我观察到 SourceManager.cpp 由于断言失败而调用中止。具体位置在这里:
FileID SourceManager::createFileID(const ContentCache *File,
SourceLocation IncludePos,
SrcMgr::CharacteristicKind FileCharacter,
int LoadedID, unsigned LoadedOffset) {
...
...
assert(NextLocalOffset + FileSize + 1 > NextLocalOffset &&
NextLocalOffset + FileSize + 1 <= CurrentLoadedOffset &&
"Ran out of source locations!");
...
...
...
}
断言失败时变量的值分别为:NextLocalOffset=2147335549,FileSize=303516,CurrentLoadedOffset=2147483648,(NextLocalOffset + FileSize)=2147639065。
源文件是自动生成的,大小约为 28,268,746 字节 (~27MB),包含多个用于内存映射不同代码块的包含指令 (~7000)。
Clang 可以处理的源文件大小是否有限制?
解决方案
推荐阅读
- mongodb - 如何在 MongoDB Stitch Functions 代码中使用 Object.bsonsize?
- excel - How to get different years for a slicer
- informatica - 如何从来自源的一组日期中选择最大日期,除了高日期?
- wordpress - 将另一个 Wordpress 数据库中的帖子添加到 WP Query
- python - 在数据帧上使用 groupby 进行动态移位
- azure-log-analytics - 当 Linux 服务停止时,如何在 OMS 中创建警报?
- mysql - 获取两个日期范围之间的缺失日期
- npm - 代替 npm 使用老派有什么缺点吗