2015-10-01 2 views
1

Я пытаюсь построить нулевой указатель, используя LLVM построить магазин команд строителя для следующего фрагмента кода:LLVM поддержка указатель типа API

int *x; 
x = 0; 

Проблема, с которой я столкнулся в том, что при назначении нуля до х I я получаю ошибку несовместимого типа, поскольку 0 имеет тип i32, а x имеет тип i32 **. Я использую LLVMPointerType для создания типа указателя для нуля и использования его в построителе BuildStore, но LLVMPointerType возвращает LLVMTypeRef, тогда как для BuildStore нужен тип аргумента LLVMValueRef. Я застрял, не имея возможности набирать текст и действительно могу использовать некоторую помощь.

Также есть другой способ создания указателя NULL в LLVM?

ответ

0

Если вы только что создали нулевой указатель, вы почти там - у вас есть ссылка на нужный тип (i32*), и теперь вам нужно создать константу этого типа , В этом случае вы можете использовать функцию LLVMConstPointerNull, чтобы получить значение, представляющее нулевой указатель заданного типа.

В общем случае, если вы начинаете с целочисленного значения и хотите передать его в значение указателя, вы можете создать const_prend или команду inttoptr, используя LLVMBuildIntToPtr.

+0

Я пытался использовать LLVMBuildIntToPtr раньше, но он показывает мне ошибку аргументов несовместимого типа, я использую $$ = LLVMBuildIntToPtr (Builder, $ 3, LLVMTypeOf ($ 1), ""); но он бросает мне ошибку и даже с $$ = LLVMBuildStore (Builder, LLVMConstPointerNull ((LLVMPointerType (LLVMTypeOf ($ 3)), 0)), $ 1); это бросает мне ошибку. @IsmailBadawi –

+0

@ManishKhilnani Пожалуйста, укажите код, который вы используете, и конкретные ошибки, возникающие в вопросе. –

+0

$$ = LLVMBuildStore (Builder, (LLVMConstPointerNull (LLVMInt32TypeInContext (Контекст))), $ 1); и это ошибка, которую я получаю :: typename llvm :: cast_retty :: ret_type llvm :: cast (Y *) [с X = llvm :: PointerType; Y = llvm :: Тип; typename llvm :: cast_retty :: ret_type = llvm :: PointerType *]: Утверждение 'isa (Val) &&" cast () аргумент несовместимого типа! "'не удалось. @Ismail Badawi –

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