1 // Copyright (C) 2020-2024 Free Software Foundation, Inc.
3 // This file is part of GCC.
5 // GCC is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU General Public License as published by the Free
7 // Software Foundation; either version 3, or (at your option) any later
10 // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 // You should have received a copy of the GNU General Public License
16 // along with GCC; see the file COPYING3. If not see
17 // <http://www.gnu.org/licenses/>.
19 #ifndef RUST_FEATURE_GATE_H
20 #define RUST_FEATURE_GATE_H
22 #include "rust-ast-visitor.h"
23 #include "rust-ast-full.h"
24 #include "rust-feature.h"
30 class FeatureGate
: public AST::ASTVisitor
35 void check (AST::Crate
&crate
);
37 void visit (AST::Token
&tok
) override
{}
38 void visit (AST::DelimTokenTree
&delim_tok_tree
) override
{}
39 void visit (AST::AttrInputMetaItemContainer
&input
) override
{}
40 void visit (AST::IdentifierExpr
&ident_expr
) override
{}
41 void visit (AST::Lifetime
&lifetime
) override
{}
42 void visit (AST::LifetimeParam
&lifetime_param
) override
{}
43 void visit (AST::ConstGenericParam
&const_param
) override
{}
44 void visit (AST::PathInExpression
&path
) override
{}
45 void visit (AST::TypePathSegment
&segment
) override
{}
46 void visit (AST::TypePathSegmentGeneric
&segment
) override
{}
47 void visit (AST::TypePathSegmentFunction
&segment
) override
{}
48 void visit (AST::TypePath
&path
) override
{}
49 void visit (AST::QualifiedPathInExpression
&path
) override
{}
50 void visit (AST::QualifiedPathInType
&path
) override
{}
51 void visit (AST::LiteralExpr
&expr
) override
{}
52 void visit (AST::AttrInputLiteral
&attr_input
) override
{}
53 void visit (AST::MetaItemLitExpr
&meta_item
) override
{}
54 void visit (AST::MetaItemPathLit
&meta_item
) override
{}
55 void visit (AST::BorrowExpr
&expr
) override
{}
56 void visit (AST::DereferenceExpr
&expr
) override
{}
57 void visit (AST::ErrorPropagationExpr
&expr
) override
{}
58 void visit (AST::NegationExpr
&expr
) override
{}
59 void visit (AST::ArithmeticOrLogicalExpr
&expr
) override
{}
60 void visit (AST::ComparisonExpr
&expr
) override
{}
61 void visit (AST::LazyBooleanExpr
&expr
) override
{}
62 void visit (AST::TypeCastExpr
&expr
) override
{}
63 void visit (AST::AssignmentExpr
&expr
) override
{}
64 void visit (AST::CompoundAssignmentExpr
&expr
) override
{}
65 void visit (AST::GroupedExpr
&expr
) override
{}
66 void visit (AST::ArrayElemsValues
&elems
) override
{}
67 void visit (AST::ArrayElemsCopied
&elems
) override
{}
68 void visit (AST::ArrayExpr
&expr
) override
{}
69 void visit (AST::ArrayIndexExpr
&expr
) override
{}
70 void visit (AST::TupleExpr
&expr
) override
{}
71 void visit (AST::TupleIndexExpr
&expr
) override
{}
72 void visit (AST::StructExprStruct
&expr
) override
{}
73 void visit (AST::StructExprFieldIdentifier
&field
) override
{}
74 void visit (AST::StructExprFieldIdentifierValue
&field
) override
{}
75 void visit (AST::StructExprFieldIndexValue
&field
) override
{}
76 void visit (AST::StructExprStructFields
&expr
) override
{}
77 void visit (AST::StructExprStructBase
&expr
) override
{}
78 void visit (AST::CallExpr
&expr
) override
{}
79 void visit (AST::MethodCallExpr
&expr
) override
{}
80 void visit (AST::FieldAccessExpr
&expr
) override
{}
81 void visit (AST::ClosureExprInner
&expr
) override
{}
82 void visit (AST::BlockExpr
&expr
) override
{}
83 void visit (AST::ClosureExprInnerTyped
&expr
) override
{}
84 void visit (AST::ContinueExpr
&expr
) override
{}
85 void visit (AST::BreakExpr
&expr
) override
{}
86 void visit (AST::RangeFromToExpr
&expr
) override
{}
87 void visit (AST::RangeFromExpr
&expr
) override
{}
88 void visit (AST::RangeToExpr
&expr
) override
{}
89 void visit (AST::RangeFullExpr
&expr
) override
{}
90 void visit (AST::RangeFromToInclExpr
&expr
) override
{}
91 void visit (AST::RangeToInclExpr
&expr
) override
{}
92 void visit (AST::ReturnExpr
&expr
) override
{}
93 void visit (AST::UnsafeBlockExpr
&expr
) override
{}
94 void visit (AST::LoopExpr
&expr
) override
{}
95 void visit (AST::WhileLoopExpr
&expr
) override
{}
96 void visit (AST::WhileLetLoopExpr
&expr
) override
{}
97 void visit (AST::ForLoopExpr
&expr
) override
{}
98 void visit (AST::IfExpr
&expr
) override
{}
99 void visit (AST::IfExprConseqElse
&expr
) override
{}
100 void visit (AST::IfExprConseqIf
&expr
) override
{}
101 void visit (AST::IfExprConseqIfLet
&expr
) override
{}
102 void visit (AST::IfLetExpr
&expr
) override
{}
103 void visit (AST::IfLetExprConseqElse
&expr
) override
{}
104 void visit (AST::IfLetExprConseqIf
&expr
) override
{}
105 void visit (AST::IfLetExprConseqIfLet
&expr
) override
{}
106 void visit (AST::MatchExpr
&expr
) override
{}
107 void visit (AST::AwaitExpr
&expr
) override
{}
108 void visit (AST::AsyncBlockExpr
&expr
) override
{}
109 void visit (AST::TypeParam
¶m
) override
{}
110 void visit (AST::LifetimeWhereClauseItem
&item
) override
{}
111 void visit (AST::TypeBoundWhereClauseItem
&item
) override
{}
112 void visit (AST::Method
&method
) override
{}
113 void visit (AST::Module
&module
) override
{}
114 void visit (AST::ExternCrate
&crate
) override
{}
115 void visit (AST::UseTreeGlob
&use_tree
) override
{}
116 void visit (AST::UseTreeList
&use_tree
) override
{}
117 void visit (AST::UseTreeRebind
&use_tree
) override
{}
118 void visit (AST::UseDeclaration
&use_decl
) override
{}
119 void visit (AST::Function
&function
) override
{}
120 void visit (AST::TypeAlias
&type_alias
) override
{}
121 void visit (AST::StructStruct
&struct_item
) override
{}
122 void visit (AST::TupleStruct
&tuple_struct
) override
{}
123 void visit (AST::EnumItem
&item
) override
{}
124 void visit (AST::EnumItemTuple
&item
) override
{}
125 void visit (AST::EnumItemStruct
&item
) override
{}
126 void visit (AST::EnumItemDiscriminant
&item
) override
{}
127 void visit (AST::Enum
&enum_item
) override
{}
128 void visit (AST::Union
&union_item
) override
{}
129 void visit (AST::ConstantItem
&const_item
) override
{}
130 void visit (AST::StaticItem
&static_item
) override
{}
131 void visit (AST::TraitItemFunc
&item
) override
{}
132 void visit (AST::TraitItemMethod
&item
) override
{}
133 void visit (AST::TraitItemConst
&item
) override
{}
134 void visit (AST::TraitItemType
&item
) override
{}
135 void visit (AST::Trait
&trait
) override
{}
136 void visit (AST::InherentImpl
&impl
) override
{}
137 void visit (AST::TraitImpl
&impl
) override
{}
138 void visit (AST::ExternalStaticItem
&item
) override
{}
139 void visit (AST::ExternalFunctionItem
&item
) override
{}
140 void visit (AST::ExternBlock
&block
) override
;
141 void visit (AST::MacroMatchFragment
&match
) override
{}
142 void visit (AST::MacroMatchRepetition
&match
) override
{}
143 void visit (AST::MacroMatcher
&matcher
) override
{}
144 void visit (AST::MacroRulesDefinition
&rules_def
) override
{}
145 void visit (AST::MacroInvocation
¯o_invoc
) override
{}
146 void visit (AST::MetaItemPath
&meta_item
) override
{}
147 void visit (AST::MetaItemSeq
&meta_item
) override
{}
148 void visit (AST::MetaWord
&meta_item
) override
{}
149 void visit (AST::MetaNameValueStr
&meta_item
) override
{}
150 void visit (AST::MetaListPaths
&meta_item
) override
{}
151 void visit (AST::MetaListNameValueStr
&meta_item
) override
{}
152 void visit (AST::LiteralPattern
&pattern
) override
{}
153 void visit (AST::IdentifierPattern
&pattern
) override
{}
154 void visit (AST::WildcardPattern
&pattern
) override
{}
155 void visit (AST::RangePatternBoundLiteral
&bound
) override
{}
156 void visit (AST::RangePatternBoundPath
&bound
) override
{}
157 void visit (AST::RangePatternBoundQualPath
&bound
) override
{}
158 void visit (AST::RangePattern
&pattern
) override
{}
159 void visit (AST::ReferencePattern
&pattern
) override
{}
160 void visit (AST::StructPatternFieldTuplePat
&field
) override
{}
161 void visit (AST::StructPatternFieldIdentPat
&field
) override
{}
162 void visit (AST::StructPatternFieldIdent
&field
) override
{}
163 void visit (AST::StructPattern
&pattern
) override
{}
164 void visit (AST::TupleStructItemsNoRange
&tuple_items
) override
{}
165 void visit (AST::TupleStructItemsRange
&tuple_items
) override
{}
166 void visit (AST::TupleStructPattern
&pattern
) override
{}
167 void visit (AST::TuplePatternItemsMultiple
&tuple_items
) override
{}
168 void visit (AST::TuplePatternItemsRanged
&tuple_items
) override
{}
169 void visit (AST::TuplePattern
&pattern
) override
{}
170 void visit (AST::GroupedPattern
&pattern
) override
{}
171 void visit (AST::SlicePattern
&pattern
) override
{}
172 void visit (AST::AltPattern
&pattern
) override
{}
173 void visit (AST::EmptyStmt
&stmt
) override
{}
174 void visit (AST::LetStmt
&stmt
) override
{}
175 void visit (AST::ExprStmtWithoutBlock
&stmt
) override
{}
176 void visit (AST::ExprStmtWithBlock
&stmt
) override
{}
177 void visit (AST::TraitBound
&bound
) override
{}
178 void visit (AST::ImplTraitType
&type
) override
{}
179 void visit (AST::TraitObjectType
&type
) override
{}
180 void visit (AST::ParenthesisedType
&type
) override
{}
181 void visit (AST::ImplTraitTypeOneBound
&type
) override
{}
182 void visit (AST::TraitObjectTypeOneBound
&type
) override
{}
183 void visit (AST::TupleType
&type
) override
{}
184 void visit (AST::NeverType
&type
) override
{}
185 void visit (AST::RawPointerType
&type
) override
{}
186 void visit (AST::ReferenceType
&type
) override
{}
187 void visit (AST::ArrayType
&type
) override
{}
188 void visit (AST::SliceType
&type
) override
{}
189 void visit (AST::InferredType
&type
) override
{}
190 void visit (AST::BareFunctionType
&type
) override
{}
193 void gate (Feature::Name name
, Location loc
, const std::string
&error_msg
);
194 std::set
<Feature::Name
> valid_features
;