Получить размер типа LLVM / типа разыменования
Этот вопрос очень похож на этот, но я не совсем уверен, как получить размер в следующей ситуации:
У меня есть тип указателя, например i32*
,
Теперь я хотел бы получить размер типа "указывает на", так i32
(иначе 4).
Сейчас я использую следующий код, который, кажется, работает, но я не уверен, что он действительно правильный:
Value *get_size(Type *t, IRBuilder<>& irb)
{
Value *sizePtr = irb.CreateGEP(t->getContainedType(0),
irb.CreateIntToPtr(ConstantInt::get(irb.getInt8Ty(), 0), t),
ConstantInt::get(irb.getInt8Ty(), 1));
return irb.CreatePtrToInt(sizePtr, irb.getInt64Ty());
}
(примечание: тип t
то, что передается в функцию, всегда будет указателем типа)