在我的开发中,一个函数返回一个类型为 {i8*, i64}
而在call网站上,我需要将返回值分配给一个类型为 {some_struct*, i64}
.一种方法是调用。mutateType()
方式 llvm::Value
函数调用的返回值;但是,我担心这个 mutateType()
方法可能会造成太大干扰(文档中不鼓励使用它).由于LLVM不支持结构之间的直接转换。有什么方法可以让我安全地将一个结构类型的值 "投射 "到另一个结构类型?
如果不想处理单个结构成员,一个可能的解决方案是做一个alloca,将结构存储到alloca中,对alloca进行bitcast,然后加载cast指针。请注意,如果你在llvm中使用基于类型的别名分析,比如用c或c++代码生成的llvm,这可能会交互不良,但如果你处理的是纯llvm或禁用严格的别名,这应该不是问题。