无效的getelementptr索引

时间:2013-04-01 06:50:27

标签: llvm

我在这个llvm-IR代码的最后一行收到“无效的getelementptr索引”:

%alc = alloca %mytype*
store %mytype* %obj, %mytype** %alc
%ldc = load %mytype** %alc
%gcs = getelementptr inbounds %mytype* %ldc, i32 0, i32 1

其中mytype的定义如下:

%mytype = type {i32, %tp1**, %tp1}

我有另一个类似的类型,索引它不会导致上述错误,并定义为:

%mytype2 = type {i32, i16*, %tp1}

任何帮助解决此问题将不胜感激。

1 个答案:

答案 0 :(得分:1)

导致错误是因为%mytype未定义有效类型。通常LLVM会报告类型本身的错误,但如果类型定义出现的时间晚于getelementptr(GEP)用法,那么您只会从GEP而不是类型中获得错误。

如果您将%mytype的定义移至IR文件中的GEP之前,您将看到更合适的错误消息。

在这种情况下,我猜测问题是%mytype不完整 - 缺少%tp1的定义,或者它使用的类型的定义(例如%tp2 ,我在你的评论中看到它使用的)缺失了,或类似的东西。

顺便说一句,您可能想要使用我的IR editor,它可以帮助您快速找到这些错误。

相关问题