Приведение между структурой llvm - PullRequest
0 голосов
/ 07 мая 2020

В моей разработке функция возвращает структуру типа {i8*, i64}, и на сайте вызова мне нужно присвоить возвращаемое значение структуре типа {some_struct*, i64}. Один из способов сделать это - вызвать метод mutateType() из llvm::Value для возвращаемого значения вызова функции; однако я обеспокоен тем, что этот метод mutateType() может быть слишком разрушительным (в документации не рекомендуется использовать его). Поскольку LLVM не поддерживает прямое приведение между структурами. Есть ли способ безопасно «преобразовать» значение одного типа структуры в другой?

1 Ответ

0 голосов
/ 07 мая 2020

Одним из возможных решений, если вы не хотите иметь дело с отдельными членами структуры, было бы выполнение alloca, сохранение структуры в alloca, побитовое преобразование alloca и затем загрузка указателя приведения. Обратите внимание, что это может плохо взаимодействовать, если вы используете анализ псевдонимов на основе типов в llvm, например, с llvm, сгенерированным из кода c или c ++, но если вы имеете дело с чистым llvm или отключите строгий псевдоним, этого не должно быть проблема.

...