Как сохранить идентификаторы членов структуры при компиляции в LLVM IR с Clang? - PullRequest
2 голосов
/ 07 февраля 2011

Скажем, у меня есть следующее определение структуры C:

struct stringStructure
{
    char *stringVariable;
};

Для вышеизложенного Clang производит следующий LLVM IR:

%struct.stringStructure = type { i8* }

... что включает в себя все в моем определении, кроме идентификатора переменной stringVariable.

Я хотел бы найти способ экспортировать идентификатор в сгенерированный IR LLVM, чтобы я мог ссылаться на него по имени из моего приложения (которое использует LLVM C ++ API).

Я попытался добавить атрибут annotate следующим образом:

    char *stringVariable __attribute__((annotate("stringVariable")));

... но аннотация, кажется, не проходит (структура все еще определяется как type { i8* }).

Есть идеи?

1 Ответ

1 голос
/ 07 февраля 2011

LLVM IR не сохраняет многие функции исходного языка.Вы можете проверить это с помощью кода, подобного

struct Foo {
   char *a;
};

struct Bar {
   char *a;
};

Только один тип будет генерироваться на всех, так как типы в LLVM структурно эквивалентны.Если вы хотите сохранить произвольную информацию о конструкциях вашего исходного кода, вы должны создать / использовать отладочную информацию.

...