Я сам излучаю LLVM IR.
Допустим, у нас есть строковый литерал длиной 400 символов. Могу ли я как-нибудь выдать строковый литерал в несколько строк?
Вот пример:
@.str = internal global [400 x i8] c"the-first-100-characters"
"the-second-100-characters"
"the-third-100-characters"
"the-fourth-100-characters", align 1
Clang не принимает вышеуказанный IR, в котором несколько строк строковых литералов объединяются вместе.
Вот сообщение об ошибке:
error: constant expression type mismatch
Как только я объединю их в строку «все 400 символов», она заработает.
Цель состоит в том, чтобы преобразовать мой родной язык в LLVM IR. Раньше мой собственный язык был преобразован в C / C++, который работает очень хорошо.
Что вы собираетесь с этим делать? В чем проблема банкомата?
Просто обновил контент на основе комментариев. Спасибо.
Почему вы генерируете текстовый LLVM IR и не используете C++ API?
Я мог передать битовый код LLVM IR; но пока мы пытаемся передать текстовый формат. Когда вы упоминаете об использовании C++ API, вы говорите, что вызовите C++ API для передачи IR? мы сами излучаем IR через Java.
Что касается статического объявления строк, то в IR нет поддержки многострочного макета. Вам нужно сделать это одной строкой.
@dac Я не уверен, что понимаю требование; Зачем нужно разбивать его на несколько строк? Это для прикрас, потому что в противном случае это не имеет никакого значения. Многострочной поддержки таких постоянных строк в IR нет.


Пожалуйста, отформатируйте код как код (а не как обычный текст).