2013-04-01 3 views
1

Я получаю "недействительные индексы getelementptr" на последней строке этого LLVM ИК-кода:недействительные индексы 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, чтобы появиться перед GEP в ИК-файле, вы увидите более подходящее сообщение об ошибке.

В этом случае, я предполагаю, что проблема в том, что %mytype является неполным - либо определение %tp1 отсутствует, или определение к типу он использует (например, %tp2, который я вижу в своем комментарии, что он использует) отсутствует или что-то в этом роде.

Кстати, вы можете использовать мой IR editor, это поможет вам быстро найти такие ошибки.

+0

благодарит за вашу помощь, но похоже, что этот редактор не открывается в eclipse Indego 3.7, и эта ошибка дается: Could не открывать редактор: класс редактора не может быть создан. Обычно это указывает на отсутствующий конструктор no-arg или что имя класса редактора было ошибочным в файле plugin.xml. – user1723583

+0

@ user1723583 Bummer, я рассмотрю его ([открыта ошибка] (https://github.com/amishne/llvm-ir-editor/issues/76)). Тем временем вы можете просто отменить порядок и сообщить LLVM о проблеме. – Oak

+0

@ пользователь1723583 получается * * не делаю * поддержка Eclipse 3.7 из-за коробки, есть [дополнительный (простой) шаг, который вам нужно взять] (http://amishne.github.io/llvm-ir- редактор/# older_eclipse). Обновили часто задаваемые вопросы и требования к установке, и теперь он больше не позволит вам устанавливать, если он не может найти эту зависимость. Спасибо, что дали мне знать. – Oak

Смежные вопросы