C++ LLVM字符串值对象:如何从值中检索字符串?

C++ LLVM字符串值对象:如何从值中检索字符串?,c++,llvm,llvm-3.0,C++,Llvm,Llvm 3.0,当从现有AST构建IR时,我的AST有一些字符串值(在编译时它们是从std::string构建的),我希望将它们安全地设置为llvm::Value,以用作表达式的一部分 在本例中,我不需要在运行时绑定字符串,因为字符串值仅用于在编译时将内容解析为变量、函数或类(该语言不支持本机字符串类型) 让我的字符串内容保持为llvm::Value,并且在编译的后期(构建嵌套表达式时)仍然能够检索它的最佳方法是什么 更具体地说,如果我将llvm::Value设置为: llvm::Value* v = llv

当从现有AST构建IR时,我的AST有一些字符串值(在编译时它们是从
std::string
构建的),我希望将它们安全地设置为
llvm::Value
,以用作表达式的一部分

在本例中,我不需要在运行时绑定字符串,因为字符串值仅用于在编译时将内容解析为变量、函数或类(该语言不支持本机字符串类型)

让我的字符串内容保持为
llvm::Value
,并且在编译的后期(构建嵌套表达式时)仍然能够检索它的最佳方法是什么

更具体地说,如果我将
llvm::Value
设置为:

 llvm::Value* v = llvm::ConstantArray::get(llvmContext, myString.c_str());
如何安全地检索字符串值?
llvm::ConstantArray
是包装字符串的合适方式吗?

在C代码上运行
char*x=“asdf”提供:

@.str = private unnamed_addr constant [5 x i8] c"asdf\00"
@x = global i8* getelementptr inbounds ([5 x i8]* @.str, i64 0, i64 0), align 8

基本上,要获取字符串的地址,必须构建一个包含它的全局。如果你想知道如何做,你可以切换到输出C++调用。

< P>是的,ConstantArray是你应该使用的。为了以后检索该值,只需使用ConstantArray::getAsCString()。如果您打开了断言,它将断言是否出现了错误(例如,您将尝试从没有零终止符的数组中获取字符串)