115#define ABSTRACT_STMT(Kind)
116#define STMT(Kind, Base) case Expr::Kind##Class:
117#define EXPR(Kind, Base)
118#include "clang/AST/StmtNodes.inc"
119 llvm_unreachable(
"cannot classify a statement");
122 case Expr::ObjCIsaExprClass:
124 case Expr::ObjCSubscriptRefExprClass:
125 case Expr::ObjCPropertyRefExprClass:
127 case Expr::CXXTypeidExprClass:
128 case Expr::CXXUuidofExprClass:
131 case Expr::UnresolvedLookupExprClass:
132 case Expr::UnresolvedMemberExprClass:
133 case Expr::DependentCoawaitExprClass:
134 case Expr::CXXDependentScopeMemberExprClass:
135 case Expr::DependentScopeDeclRefExprClass:
138 case Expr::ObjCIvarRefExprClass:
139 case Expr::FunctionParmPackExprClass:
140 case Expr::MSPropertyRefExprClass:
141 case Expr::MSPropertySubscriptExprClass:
142 case Expr::ArraySectionExprClass:
143 case Expr::OMPArrayShapingExprClass:
144 case Expr::OMPIteratorExprClass:
145 case Expr::HLSLOutArgExprClass:
149 case Expr::StringLiteralClass:
151 case Expr::ObjCEncodeExprClass:
159 case Expr::PredefinedExprClass: {
162 if (PE->isTransparent())
170 case Expr::CompoundLiteralExprClass:
174 case Expr::CXXBoolLiteralExprClass:
175 case Expr::CXXPseudoDestructorExprClass:
176 case Expr::UnaryExprOrTypeTraitExprClass:
177 case Expr::CXXNewExprClass:
178 case Expr::CXXNullPtrLiteralExprClass:
179 case Expr::ImaginaryLiteralClass:
180 case Expr::GNUNullExprClass:
181 case Expr::OffsetOfExprClass:
182 case Expr::CXXThrowExprClass:
183 case Expr::ShuffleVectorExprClass:
184 case Expr::ConvertVectorExprClass:
185 case Expr::IntegerLiteralClass:
186 case Expr::FixedPointLiteralClass:
187 case Expr::CharacterLiteralClass:
188 case Expr::AddrLabelExprClass:
189 case Expr::CXXDeleteExprClass:
190 case Expr::ImplicitValueInitExprClass:
191 case Expr::BlockExprClass:
192 case Expr::FloatingLiteralClass:
193 case Expr::CXXNoexceptExprClass:
194 case Expr::CXXScalarValueInitExprClass:
195 case Expr::TypeTraitExprClass:
196 case Expr::ArrayTypeTraitExprClass:
197 case Expr::ExpressionTraitExprClass:
198 case Expr::ObjCSelectorExprClass:
199 case Expr::ObjCProtocolExprClass:
200 case Expr::ObjCStringLiteralClass:
201 case Expr::ObjCBoxedExprClass:
202 case Expr::ObjCArrayLiteralClass:
203 case Expr::ObjCDictionaryLiteralClass:
204 case Expr::ObjCBoolLiteralExprClass:
205 case Expr::ObjCAvailabilityCheckExprClass:
206 case Expr::ParenListExprClass:
207 case Expr::SizeOfPackExprClass:
208 case Expr::SubstNonTypeTemplateParmPackExprClass:
209 case Expr::AsTypeExprClass:
210 case Expr::ObjCIndirectCopyRestoreExprClass:
211 case Expr::AtomicExprClass:
212 case Expr::CXXFoldExprClass:
213 case Expr::ArrayInitLoopExprClass:
214 case Expr::ArrayInitIndexExprClass:
215 case Expr::NoInitExprClass:
216 case Expr::DesignatedInitUpdateExprClass:
217 case Expr::SourceLocExprClass:
218 case Expr::ConceptSpecializationExprClass:
219 case Expr::RequiresExprClass:
220 case Expr::CXXReflectExprClass:
223 case Expr::EmbedExprClass:
229 case Expr::CXXThisExprClass:
232 case Expr::ConstantExprClass:
236 case Expr::SubstNonTypeTemplateParmExprClass:
240 case Expr::PackIndexingExprClass: {
252 case Expr::ArraySubscriptExprClass:
255 if (Lang.CPlusPlus11) {
259 if (
Base->getType()->isArrayType())
264 case Expr::MatrixSingleSubscriptExprClass:
268 case Expr::MatrixSubscriptExprClass:
273 case Expr::DeclRefExprClass:
280 case Expr::MemberExprClass:
283 case Expr::UnaryOperatorClass:
319 case Expr::RecoveryExprClass:
320 case Expr::OpaqueValueExprClass:
324 case Expr::PseudoObjectExprClass:
330 case Expr::ImplicitCastExprClass:
335 case Expr::ParenExprClass:
341 case Expr::GenericSelectionExprClass:
346 case Expr::BinaryOperatorClass:
347 case Expr::CompoundAssignOperatorClass:
353 case Expr::CallExprClass:
354 case Expr::CXXOperatorCallExprClass:
355 case Expr::CXXMemberCallExprClass:
356 case Expr::UserDefinedLiteralClass:
357 case Expr::CUDAKernelCallExprClass:
360 case Expr::CXXRewrittenBinaryOperatorClass:
365 case Expr::ChooseExprClass:
370 case Expr::ExtVectorElementExprClass:
379 case Expr::MatrixElementExprClass:
388 case Expr::CXXDefaultArgExprClass:
392 case Expr::CXXDefaultInitExprClass:
396 case Expr::CXXBindTemporaryExprClass:
400 case Expr::ExprWithCleanupsClass:
404 case Expr::CStyleCastExprClass:
405 case Expr::CXXFunctionalCastExprClass:
406 case Expr::CXXStaticCastExprClass:
407 case Expr::CXXDynamicCastExprClass:
408 case Expr::CXXReinterpretCastExprClass:
409 case Expr::CXXConstCastExprClass:
410 case Expr::CXXAddrspaceCastExprClass:
411 case Expr::ObjCBridgedCastExprClass:
412 case Expr::BuiltinBitCastExprClass:
417 case Expr::CXXUnresolvedConstructExprClass:
421 case Expr::BinaryConditionalOperatorClass: {
427 case Expr::ConditionalOperatorClass: {
436 case Expr::ObjCMessageExprClass:
445 case Expr::CXXConstructExprClass:
446 case Expr::CXXInheritedCtorInitExprClass:
447 case Expr::CXXTemporaryObjectExprClass:
448 case Expr::LambdaExprClass:
449 case Expr::CXXStdInitializerListExprClass:
452 case Expr::VAArgExprClass:
455 case Expr::DesignatedInitExprClass:
458 case Expr::StmtExprClass: {
460 if (
const auto *LastExpr = dyn_cast_or_null<Expr>(S->
body_back()))
465 case Expr::PackExpansionExprClass:
468 case Expr::MaterializeTemporaryExprClass:
473 case Expr::InitListExprClass:
481 "Only 1-element init lists can be glvalues.");
484 case Expr::CoawaitExprClass:
485 case Expr::CoyieldExprClass:
487 case Expr::SYCLUniqueStableNameExprClass:
488 case Expr::OpenACCAsteriskSizeExprClass:
492 case Expr::CXXParenListInitExprClass:
498 llvm_unreachable(
"unhandled expression kind in classification");
Defines the clang::ASTContext interface.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
static CanQualType getCanonicalType(QualType T)
Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...