Как вычислить правильную разницу указателей в API LLVM C++ для инициализации глобальной переменной?C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Как вычислить правильную разницу указателей в API LLVM C++ для инициализации глобальной переменной?

Сообщение Гость »


Предположим, у меня есть два указателя на глобальный массив, оба представлены как «адрес массива плюс некоторое смещение». Каков правильный подход к вычислению разницы указателей, чтобы ее можно было использовать для инициализации глобальной переменной?
Обновление: Я также хочу, чтобы разница указателей была константа времени компиляции, если два указателя указывают на локальный массив или на члены одной и той же структуры.
В моей первой попытке я использовал

Код: Выделить всё

CreatePtrDiff
and checked if a dynamic cast to

Код: Выделить всё

llvm::Constant
or

Код: Выделить всё

llvm::ConstantExpr
is possible. However, even when

Код: Выделить всё

pointer1
equals

Код: Выделить всё

pointer2
, the dynamic cast fails. Here's the code snippet:

Код: Выделить всё

auto diff =  llvmBuilder->CreatePtrDiff(llvmType, pointer1, pointer2);
if (llvm::dyn_cast(diff)) {
std::cerr 

Источник: [url]https://stackoverflow.com/questions/78141502/how-to-compute-the-correct-pointer-difference-in-llvm-c-api-for-initializing-a[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»