2016-02-29 3 views
3

Я новичок в LLVM. Я хочу создать на структуру, как показано ниже:Как определить имена переменных-членов структуры с помощью LLVM C++ API

struct abcd{ 
    int a, 
    int c, 
    int d 
} 

и мой исходный код приведен ниже:

structType at; 
at.setName("abcd"); 
std::vector<Type*> EltTys; 
EltTys->push_back(Type::getInt32Ty(getGlobalContext())); 
EltTys->push_back(Type::getInt32Ty(getGlobalContext())); 
EltTys->push_back(Type::getInt32Ty(getGlobalContext())); 
at.setBody(EltTys); 
.... 

Таким образом, я могу получить на структуру с именем abcd, но мне кажется, что структура содержит только типы , Как определить имена переменных-членов (a, c и d)?

мне они нужны, так как мы хотим использовать эту структуру таким образом:

(struct abcd*)data->a = 10; 
(struct abcd*)data->b = 11; 
(struct abcd*)data->d = 12; 
+0

спасибо, это очень полезно для меня – richardzhu

ответ

2

Struct поля в LLVM IR не имеют названия. Если вы ищете информацию о типе об их полях, используйте индекс поля для доступа к типам полей через the elements() method.

Я не совсем уверен, что вы имеете в виду, желая сделать (struct abcd*)data->a = 10;. Если вы хотите вставить поле доступа к сгенерированному коду, создайте инструкции GEP.

Кстати, вместо того, чтобы ваш фрагмент кода, вы можете просто сделать:

Type* int_type = Type::getInt32Ty(getGlobalContext()); 
StructType* at = StructType::create("abcd", int_type, int_type, int_type); 

С StructType имеет convenient create() methods for creating identified struct types.

+0

Благодарим вас за помощь! – richardzhu