2012-12-10 2 views
0

Предположим, у меня есть следующие LLVM IRМассив обнаружения в функции списка Arg LLVM опт перевале

определяют недействительным @foo (i32 *% а, i32 *% м) nounwind {...

и зову foo, передав массив для первого arg и передав адрес переменной для m. Теперь мне нужно проанализировать список аргументов foo и определить, какой аргумент передается массивом, и который является просто адресом указателя. Я знаю, что и на самом деле являются адресами, но LLVM обеспечить своего рода метаданные, так что я могу статически определить тип передается в

. Примечание: Я пишу Блокировщик пропуск

ответ

1

Вы, вероятно, можно использовать " указатель на массив»типа вместо:

массива
define void @foo([0 x i32]* %a, i32* %m) 

нулевого размера отлично действует и документация LLVM говорит, что:

Там нет ограничений по индексации за конец массива , подразумеваемый статическим типом