Возможно, вы генерируете фиктивный ИК где-то в вашем кодеУпомянутое вами утверждение может быть вызвано, например, созданием константного выражения, которое использует результат другой инструкции в качестве операнда:
%0 = <some instruction producing result>
store i8* getelementptr inbounds ([123 x i8], [123 x i8]* @some_string, i32 %0, i32 0), ...
Здесь часть getelementptr inbounds ...
является константным выражением , который не может содержать ничего, кроме других констант.Следовательно, мы не можем использовать %0
в качестве индексов здесь.
Вместо этого нам нужно использовать getelementptr
инструкция :
%0 = <some instruction producing result>
%1 = i8* getelementptr inbounds ([123 x i8], [123 x i8]* @some_string, i32 %0, i32 0)
store i8* %1, ...
Что касается вашего случаяВы можете просто позвонить I.dump()
из своего кода или из отладчика, чтобы выяснить, какая инструкция в точности вызывает ошибочное утверждение.