1class AttrSubject;
2
3class Decl<string diagSpelling = "", bit abstract = 0> : AttrSubject {
4  bit Abstract = abstract;
5  string DiagSpelling = diagSpelling;
6}
7
8class DDecl<Decl base, string diagSpelling = "", bit abstract = 0>
9    : Decl<diagSpelling, abstract> {
10  Decl Base = base;
11}
12
13class DeclContext {}
14
15def TranslationUnit : Decl, DeclContext;
16def PragmaComment : Decl;
17def PragmaDetectMismatch : Decl;
18def ExternCContext : Decl, DeclContext;
19def Named : Decl<"named declarations", 1>;
20  def Namespace : DDecl<Named, "namespaces">, DeclContext;
21  def UsingDirective : DDecl<Named>;
22  def NamespaceAlias : DDecl<Named>;
23  def Label : DDecl<Named, "labels">;
24  def Type : DDecl<Named, "types", 1>;
25    def TypedefName : DDecl<Type, "typedefs", 1>;
26      def Typedef : DDecl<TypedefName>;
27      def TypeAlias : DDecl<TypedefName>;
28      def ObjCTypeParam : DDecl<TypedefName>;
29    def UnresolvedUsingTypename : DDecl<Type>;
30    def Tag : DDecl<Type, "tag types", 1>, DeclContext;
31      def Enum : DDecl<Tag, "enums">;
32      def Record : DDecl<Tag, "structs, unions, classes">;
33        def CXXRecord : DDecl<Record, "classes">;
34          def ClassTemplateSpecialization : DDecl<CXXRecord>;
35            def ClassTemplatePartialSpecialization
36              : DDecl<ClassTemplateSpecialization>;
37    def TemplateTypeParm : DDecl<Type>;
38  def Value : DDecl<Named, "value declarations", 1>;
39    def EnumConstant : DDecl<Value, "enumerators">;
40    def UnresolvedUsingValue : DDecl<Value>;
41    def IndirectField : DDecl<Value>;
42    def Binding : DDecl<Value>;
43    def OMPDeclareReduction : DDecl<Value>, DeclContext;
44    def OMPDeclareMapper : DDecl<Value>, DeclContext;
45    def Declarator : DDecl<Value, "declarators", 1>;
46      def Field : DDecl<Declarator, "non-static data members">;
47        def ObjCIvar : DDecl<Field>;
48        def ObjCAtDefsField : DDecl<Field>;
49      def MSProperty : DDecl<Declarator>;
50      def Function : DDecl<Declarator, "functions">, DeclContext;
51        def CXXDeductionGuide : DDecl<Function>;
52        def CXXMethod : DDecl<Function>;
53          def CXXConstructor : DDecl<CXXMethod>;
54          def CXXDestructor : DDecl<CXXMethod>;
55          def CXXConversion : DDecl<CXXMethod>;
56      def Var : DDecl<Declarator, "variables">;
57        def VarTemplateSpecialization : DDecl<Var>;
58          def VarTemplatePartialSpecialization
59            : DDecl<VarTemplateSpecialization>;
60        def ImplicitParam : DDecl<Var>;
61        def ParmVar : DDecl<Var, "parameters">;
62        def Decomposition : DDecl<Var>;
63        def OMPCapturedExpr : DDecl<Var>;
64      def NonTypeTemplateParm : DDecl<Declarator>;
65  def Template : DDecl<Named, "templates", 1>;
66    def RedeclarableTemplate : DDecl<Template, "redeclarable templates", 1>;
67      def FunctionTemplate : DDecl<RedeclarableTemplate>;
68      def ClassTemplate : DDecl<RedeclarableTemplate>;
69      def VarTemplate : DDecl<RedeclarableTemplate>;
70      def TypeAliasTemplate : DDecl<RedeclarableTemplate>;
71    def TemplateTemplateParm : DDecl<Template>;
72    def BuiltinTemplate : DDecl<Template>;
73    def Concept : DDecl<Template>;
74  def Using : DDecl<Named>;
75  def UsingPack : DDecl<Named>;
76  def UsingShadow : DDecl<Named>;
77    def ConstructorUsingShadow : DDecl<UsingShadow>;
78  def ObjCMethod : DDecl<Named, "Objective-C methods">, DeclContext;
79  def ObjCContainer : DDecl<Named, "Objective-C containers", 1>, DeclContext;
80    def ObjCCategory : DDecl<ObjCContainer>;
81    def ObjCProtocol : DDecl<ObjCContainer, "Objective-C protocols">;
82    def ObjCInterface : DDecl<ObjCContainer, "Objective-C interfaces">;
83    def ObjCImpl
84        : DDecl<ObjCContainer, "Objective-C implementation declarations", 1>;
85      def ObjCCategoryImpl : DDecl<ObjCImpl>;
86      def ObjCImplementation : DDecl<ObjCImpl>;
87  def ObjCProperty : DDecl<Named, "Objective-C properties">;
88  def ObjCCompatibleAlias : DDecl<Named>;
89def LinkageSpec : Decl, DeclContext;
90def Export : Decl, DeclContext;
91def ObjCPropertyImpl : Decl;
92def FileScopeAsm : Decl;
93def AccessSpec : Decl;
94def Friend : Decl;
95def FriendTemplate : Decl;
96def StaticAssert : Decl;
97def Block : Decl<"blocks">, DeclContext;
98def Captured : Decl, DeclContext;
99def ClassScopeFunctionSpecialization : Decl;
100def Import : Decl;
101def OMPThreadPrivate : Decl;
102def OMPAllocate : Decl;
103def OMPRequires : Decl;
104def Empty : Decl;
105
106