我正在研究使用LLVM的C ++ API分析LLVM IR的代码,我试图弄清楚两个或更多llvm::GlobalObject
值何时可能最终命名同一块内存。我需要永远不会得出假阴性结论。
AFAIK,llvm::Module::aliases()
枚举module's explicit aliases,这是一个开始。我担心的是,以后可能会引入额外的别名:
考虑这个例子:
@A = common global i32 0, align 4
@B = external global i32
@C = external dllimport global i32, align 4
...
我担心静态链接器可以自由地将@A
和@B
绑定到同一个存储区。和/或动态链接器可能会将@A
和@C
绑定到同一个存储区。
有谁知道这些是否是现实的可能性?我是否遗漏了编译后步骤可能导致两个GlobalObject
's别名的任何其他方式?