我在这个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}
任何帮助解决此问题将不胜感激。
答案 0 :(得分:1)
导致错误是因为%mytype
未定义有效类型。通常LLVM会报告类型本身的错误,但如果类型定义出现的时间晚于getelementptr(GEP)用法,那么您只会从GEP而不是类型中获得错误。
如果您将%mytype
的定义移至IR文件中的GEP之前,您将看到更合适的错误消息。
在这种情况下,我猜测问题是%mytype
不完整 - 缺少%tp1
的定义,或者它使用的类型的定义(例如%tp2
,我在你的评论中看到它使用的)缺失了,或类似的东西。
顺便说一句,您可能想要使用我的IR editor,它可以帮助您快速找到这些错误。