c++ - 如何检测 LLVM 中的 const 修饰符?
问题描述
我意识到 LLVM 中的常量与使用 c/c++ 的 const 修饰符的变量不同。
我有什么办法可以将 LLVM 中带有 const 修饰符的 C/C++ 变量与没有的 C/C++ 变量区分开来?(所有变量,包括全局变量)
解决方案
LLVM IR 并非旨在表示源类型系统,它是一种中间表示,包含对编译有用的类型信息,它类似于源类型,但不需要捕获所有方面。如果您想要源类型系统,则必须查看调试信息,这些信息不需要存在,但如果存在,它至少旨在包含您想要的数据。
您可以开始查看DIType。请注意,此代码没有很好的文档记录。
不过,全局变量有一个方便的方法isConstant()。
推荐阅读
- gradle - 在 build.gradle 中如何提取和重用 Maven 存储库配置?
- sql - 执行 INNER JOIN 时查询返回错误值?
- mysql - 大量行的最佳存储?
- java - ElasticSearch 高级 API 使用自定义设置创建索引返回错误
- javascript - 对象加载成功但不显示
- ruby-on-rails - 检查一个时间范围是否在另一个时间范围和多少小时之间 Ruby on Rails
- amazon-web-services - AWS API Gateway 为 Web 应用程序引发 502 错误
- sql-server - 禁用表上的 CDC,但保留 CDC 表的历史记录
- python - 如何修复 - 错误:错误转义 \u 在位置 0
- python - 将 REST API 的 JSON 响应作为输入数据传递到 APACHE SOLR