clang: пользовательские атрибуты не отображаются в AST

Я реализовал пользовательский атрибут в Clang, как описано в официальном руководстве:
http://clang.llvm.org/docs/InternalsManual.html#how-to-add-an-attribute

Поэтому я добавил следующий код в Attr.td:

def MyAttr: InheritableAttr {

let Spellings = [GNU<"my_attr">, CXX11<"me", "my_attr">, GCC<"my_attr">, Declspec<"my_attr">];
let Subjects = SubjectList<[Var, Function, CXXRecord]>;

let Documentation = [MyAttrDocs];

}

и документация для AttrDocs.td. После восстановления Clang, он, очевидно, знает атрибут, потому что я не получаю предупреждение о неизвестном атрибуте при его использовании. Я даже могу получить доступ к новому классу атрибутов с libtooling, но атрибут не отображается в AST, даже если я добавлю строку let ASTNode = 1 к определению атрибута.

Есть ли что-то еще, что мне нужно рассмотреть, или в чем может быть проблема?

4

Решение

К сожалению, это была моя ошибка, пропущенный шаг описан в руководстве в разделе «Boilerplate»: мне просто пришлось реализовать семантическую обработку атрибута в SemaDeclAttr.cpp, добавив новый случай:

case AttributeList::AT_MyAttr:
handleSimpleAttribute<MyAttrAttr>(S, D, Attr);
break;

Так что теперь работает нормально.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]