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:
221 case Expr::CXXExpansionSelectExprClass:
224 case Expr::EmbedExprClass:
230 case Expr::CXXThisExprClass:
233 case Expr::ConstantExprClass:
237 case Expr::SubstNonTypeTemplateParmExprClass:
241 case Expr::PackIndexingExprClass: {
253 case Expr::ArraySubscriptExprClass:
256 if (Lang.CPlusPlus11) {
260 if (
Base->getType()->isArrayType())
265 case Expr::MatrixSingleSubscriptExprClass:
269 case Expr::MatrixSubscriptExprClass:
274 case Expr::DeclRefExprClass:
281 case Expr::MemberExprClass:
284 case Expr::UnaryOperatorClass:
320 case Expr::RecoveryExprClass:
321 case Expr::OpaqueValueExprClass:
325 case Expr::PseudoObjectExprClass:
331 case Expr::ImplicitCastExprClass:
336 case Expr::ParenExprClass:
342 case Expr::GenericSelectionExprClass:
347 case Expr::BinaryOperatorClass:
348 case Expr::CompoundAssignOperatorClass:
354 case Expr::CallExprClass:
355 case Expr::CXXOperatorCallExprClass:
356 case Expr::CXXMemberCallExprClass:
357 case Expr::UserDefinedLiteralClass:
358 case Expr::CUDAKernelCallExprClass:
361 case Expr::CXXRewrittenBinaryOperatorClass:
366 case Expr::ChooseExprClass:
371 case Expr::ExtVectorElementExprClass:
380 case Expr::MatrixElementExprClass:
389 case Expr::CXXDefaultArgExprClass:
393 case Expr::CXXDefaultInitExprClass:
397 case Expr::CXXBindTemporaryExprClass:
401 case Expr::ExprWithCleanupsClass:
405 case Expr::CStyleCastExprClass:
406 case Expr::CXXFunctionalCastExprClass:
407 case Expr::CXXStaticCastExprClass:
408 case Expr::CXXDynamicCastExprClass:
409 case Expr::CXXReinterpretCastExprClass:
410 case Expr::CXXConstCastExprClass:
411 case Expr::CXXAddrspaceCastExprClass:
412 case Expr::ObjCBridgedCastExprClass:
413 case Expr::BuiltinBitCastExprClass:
418 case Expr::CXXUnresolvedConstructExprClass:
422 case Expr::BinaryConditionalOperatorClass: {
428 case Expr::ConditionalOperatorClass: {
437 case Expr::ObjCMessageExprClass:
446 case Expr::CXXConstructExprClass:
447 case Expr::CXXInheritedCtorInitExprClass:
448 case Expr::CXXTemporaryObjectExprClass:
449 case Expr::LambdaExprClass:
450 case Expr::CXXStdInitializerListExprClass:
453 case Expr::VAArgExprClass:
456 case Expr::DesignatedInitExprClass:
459 case Expr::StmtExprClass: {
461 if (
const auto *LastExpr = dyn_cast_or_null<Expr>(S->
body_back()))
466 case Expr::PackExpansionExprClass:
469 case Expr::MaterializeTemporaryExprClass:
474 case Expr::InitListExprClass:
482 "Only 1-element init lists can be glvalues.");
485 case Expr::CoawaitExprClass:
486 case Expr::CoyieldExprClass:
488 case Expr::SYCLUniqueStableNameExprClass:
489 case Expr::OpenACCAsteriskSizeExprClass:
493 case Expr::CXXParenListInitExprClass:
499 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 ...