Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Llvm 如何更改类型:定义前使用全局变量_Llvm_Llvm C++ Api - Fatal编程技术网

Llvm 如何更改类型:定义前使用全局变量

Llvm 如何更改类型:定义前使用全局变量,llvm,llvm-c++-api,Llvm,Llvm C++ Api,在我的例子中,我需要在模块中创建对全局变量的引用,然后在引用之后定义全局变量 当我创建将使用全局变量的指令时,我不知道变量的类型。即使我实际上只需要符号的地址,我仍然需要通过指定类型来创建llvm::GlobalVariable对象 这导致了一个问题,当我稍后定义全局变量时,我知道类型,但不幸的是,我无法替换我之前创建的GlobalVariable对象 以下是伪代码: llvm::Value *val = new llvm::GlobalVariable(module, llvm::Type::

在我的例子中,我需要在模块中创建对全局变量的引用,然后在引用之后定义全局变量

当我创建将使用全局变量的指令时,我不知道变量的类型。即使我实际上只需要符号的地址,我仍然需要通过指定类型来创建llvm::GlobalVariable对象

这导致了一个问题,当我稍后定义全局变量时,我知道类型,但不幸的是,我无法替换我之前创建的GlobalVariable对象

以下是伪代码:

llvm::Value *val = new llvm::GlobalVariable(module, llvm::Type::getInt32Ty(), false
          , llvm::GlobalValue::ExternalLinkage, 0, "myvar");

//.... create instructions
builder.CreatePtrToInt(val, llvm::Type::getInt32Ty());

//Here I need to define and intialize the global variable. 
//Now I know the exact type of   the variable. It's different as int32 
//for example it's int16.

llvm::Value *real_val = new llvm::GlobalVariable(module, llvm::Type::getInt16Ty()
          , false,llvm::GlobalValue::ExternalLinkage, 0, "myvar");
显然,我无法创建另一个同名变量。但是如何将第一个GlobalVariable对象转换为实际类型并为其指定初始值设定项呢


有没有其他方法可以在不创建GlobalVariable对象的情况下获取符号地址?

为什么不能在使用正确的类型定义GlovalVariable之后创建指令?在LLVM中,在定义变量之前不能使用它。不幸的是,在我的情况下,我必须这样做:(