Llvm getelementptr索引无效

Llvm getelementptr索引无效,llvm,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} 我有另一种类似的类型,在其上

我在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}

如能帮助解决此问题,我们将不胜感激

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

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

在这种情况下,我猜问题在于
%mytype
不完整-要么是缺少
%tp1
的定义,要么是缺少它使用的类型的定义(例如,我在您的注释中看到它使用的
%tp2
),或者类似的内容


顺便说一下,您可能希望使用my,它将帮助您快速找到这些类型的错误。

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

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

在这种情况下,我猜问题在于
%mytype
不完整-要么是缺少
%tp1
的定义,要么是缺少它使用的类型的定义(例如,我在您的注释中看到它使用的
%tp2
),或者类似的内容


顺便说一句,您可能想使用my,它将帮助您快速找到这些类型的错误。

您能否显示一个完整的失败文件,包括
%tp1
的定义?GEP本身看起来很好。失败的文件太大,无法附加,但%tp1的定义如下:%tp1=type{i32(…)**、%tp2*(…)**、i1(…)**、void(…)**、%tp1*(…)**}能否显示完整的失败文件,包括
%tp1
的定义?GEP本身看起来很好。失败的文件太大,无法附加,但%tp1的定义如下:%tp1=type{i32(…)**、%tp2*(…)**、i1(…)**、void(…)**、%tp1*(…)**感谢您的帮助,但是,在EclipseIndego3.7中无法打开此编辑器,并且给出了以下错误:无法打开编辑器:无法实例化编辑器类。这通常表示缺少无参数构造函数,或者编辑器的类名在plugin.xml中输入错误。@user1723583 Bummer,我将研究它()。同时,您可以颠倒顺序,让LLVM自己报告问题。@user1723583结果表明,我不支持Eclipse3.7开箱即用,这是错误的。相应地更新了FAQ和安装先决条件,现在如果找不到依赖项,它将不再允许您安装。感谢您让我知道。感谢您的帮助,但是在eclipse Indego 3.7中无法打开此编辑器,并且出现了以下错误:无法打开编辑器:无法实例化编辑器类。这通常表示缺少无参数构造函数,或者编辑器的类名在plugin.xml中输入错误。@user1723583 Bummer,我将研究它()。同时,您可以颠倒顺序,让LLVM自己报告问题。@user1723583结果表明,我不支持Eclipse3.7开箱即用,这是错误的。相应地更新了FAQ和安装先决条件,现在如果找不到依赖项,它将不再允许您安装。谢谢你让我知道。