2013-04-01 52 views
1

我收到 「無效getelementptr指數」 上的這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

您能否顯示完整的失敗文件,包括'%tp1'的定義? GEP本身對我來說看起來很好。 – Oak

+0

失敗的文件太大,無法附加,但%tp1定義如下:%tp1 = type {i32(...)**,%tp2 *(...)**,i1(... )**,void(...)**,%tp1 *(...)**} – user1723583

回答

1

錯誤是由於%mytype未定義有效類型而引起的。通常,LLVM會報告類型本身的錯誤,但是如果類型定義比getelementptr(GEP)用法晚出現,那麼您只會從GEP中獲取錯誤,而不是從類型中獲取錯誤。

如果您將%mytype的定義移到IR文件中的GEP之前,您將看到更合適的錯誤消息。

在這種情況下,我猜問題是,%mytype是不完整的 - 無論是對%tp1定義缺失,或定義,它使用類型(例如%tp2,我在您的評論看到它使用)缺失,或類似的東西。

順便說一句,您可能想使用我的IR editor,它會幫助您快速找到這些類型的錯誤。

+0

感謝您的幫助,但它接觸到此編輯器無法在日食Indego 3.7中打開,並且出現此錯誤:可能不打開編輯器:編輯器類無法實例化。這通常表示缺少無參數構造函數,或者編輯器的類名稱在plugin.xml中輸入錯誤。 – user1723583

+0

@ user1723583 Bummer,我會研究它([打開一個bug](https://github.com/amishne/llvm-ir-editor/issues/76))。同時你可以逆轉這個順序,讓LLVM自己報告問題。 – Oak

+0

@ user1723583事實證明,我*不支持Eclipse 3.7開箱即用,還有[您需要採取的額外(簡單)步驟](http://amishne.github.io/llvm-ir-編輯/#older_eclipse)。相應地更新了常見問題解答和安裝先決條件,現在如果無法找到該依賴關係,它將不再允許您進行安裝。謝謝你讓我知道。 – Oak