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

lur*_*her 10 c++ llvm llvm-3.0

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

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

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

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

 llvm::Value* v = llvm::ConstantArray::get(llvmContext, myString.c_str());
Run Code Online (Sandbox Code Playgroud)

如何安全地检索字符串值?是否llvm::ConstantArray适合包装字符串?

Ant*_*kov 5

是的,ConstantArray是你应该在这里使用的.为了以后检索值,只需使用ConstantArray :: getAsCString().如果你打开了断言,它会断言是否会出错(例如你会尝试从没有终止符的数组中获取字符串).