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::DependentTemplateIdExprClass:
134 case Expr::DependentCoawaitExprClass:
135 case Expr::CXXDependentScopeMemberExprClass:
136 case Expr::DependentScopeDeclRefExprClass:
139 case Expr::ObjCIvarRefExprClass:
140 case Expr::FunctionParmPackExprClass:
141 case Expr::MSPropertyRefExprClass:
142 case Expr::MSPropertySubscriptExprClass:
143 case Expr::ArraySectionExprClass:
144 case Expr::OMPArrayShapingExprClass:
145 case Expr::OMPIteratorExprClass:
146 case Expr::HLSLOutArgExprClass:
150 case Expr::StringLiteralClass:
152 case Expr::ObjCEncodeExprClass:
160 case Expr::PredefinedExprClass: {
163 if (PE->isTransparent())
171 case Expr::CompoundLiteralExprClass:
175 case Expr::CXXBoolLiteralExprClass:
176 case Expr::CXXPseudoDestructorExprClass:
177 case Expr::UnaryExprOrTypeTraitExprClass:
178 case Expr::CXXNewExprClass:
179 case Expr::CXXNullPtrLiteralExprClass:
180 case Expr::ImaginaryLiteralClass:
181 case Expr::GNUNullExprClass:
182 case Expr::OffsetOfExprClass:
183 case Expr::CXXThrowExprClass:
184 case Expr::ShuffleVectorExprClass:
185 case Expr::ConvertVectorExprClass:
186 case Expr::IntegerLiteralClass:
187 case Expr::FixedPointLiteralClass:
188 case Expr::CharacterLiteralClass:
189 case Expr::AddrLabelExprClass:
190 case Expr::CXXDeleteExprClass:
191 case Expr::ImplicitValueInitExprClass:
192 case Expr::BlockExprClass:
193 case Expr::FloatingLiteralClass:
194 case Expr::CXXNoexceptExprClass:
195 case Expr::CXXScalarValueInitExprClass:
196 case Expr::TypeTraitExprClass:
197 case Expr::ArrayTypeTraitExprClass:
198 case Expr::ExpressionTraitExprClass:
199 case Expr::ObjCSelectorExprClass:
200 case Expr::ObjCProtocolExprClass:
201 case Expr::ObjCStringLiteralClass:
202 case Expr::ObjCBoxedExprClass:
203 case Expr::ObjCArrayLiteralClass:
204 case Expr::ObjCDictionaryLiteralClass:
205 case Expr::ObjCBoolLiteralExprClass:
206 case Expr::ObjCAvailabilityCheckExprClass:
207 case Expr::ParenListExprClass:
208 case Expr::SizeOfPackExprClass:
209 case Expr::SubstNonTypeTemplateParmPackExprClass:
210 case Expr::AsTypeExprClass:
211 case Expr::ObjCIndirectCopyRestoreExprClass:
212 case Expr::AtomicExprClass:
213 case Expr::CXXFoldExprClass:
214 case Expr::ArrayInitLoopExprClass:
215 case Expr::ArrayInitIndexExprClass:
216 case Expr::NoInitExprClass:
217 case Expr::DesignatedInitUpdateExprClass:
218 case Expr::SourceLocExprClass:
219 case Expr::ConceptSpecializationExprClass:
220 case Expr::RequiresExprClass:
221 case Expr::CXXReflectExprClass:
222 case Expr::CXXExpansionSelectExprClass:
225 case Expr::EmbedExprClass:
231 case Expr::CXXThisExprClass:
234 case Expr::ConstantExprClass:
238 case Expr::SubstNonTypeTemplateParmExprClass:
242 case Expr::PackIndexingExprClass: {
254 case Expr::ArraySubscriptExprClass:
257 if (Lang.CPlusPlus11) {
261 if (
Base->getType()->isArrayType())
266 case Expr::MatrixSingleSubscriptExprClass:
270 case Expr::MatrixSubscriptExprClass:
275 case Expr::DeclRefExprClass:
282 case Expr::MemberExprClass:
285 case Expr::UnaryOperatorClass:
321 case Expr::RecoveryExprClass:
322 case Expr::OpaqueValueExprClass:
326 case Expr::PseudoObjectExprClass:
332 case Expr::ImplicitCastExprClass:
337 case Expr::ParenExprClass:
343 case Expr::GenericSelectionExprClass:
348 case Expr::BinaryOperatorClass:
349 case Expr::CompoundAssignOperatorClass:
355 case Expr::CallExprClass:
356 case Expr::CXXOperatorCallExprClass:
357 case Expr::CXXMemberCallExprClass:
358 case Expr::UserDefinedLiteralClass:
359 case Expr::CUDAKernelCallExprClass:
362 case Expr::CXXRewrittenBinaryOperatorClass:
367 case Expr::ChooseExprClass:
372 case Expr::ExtVectorElementExprClass:
381 case Expr::MatrixElementExprClass:
390 case Expr::CXXDefaultArgExprClass:
394 case Expr::CXXDefaultInitExprClass:
398 case Expr::CXXBindTemporaryExprClass:
402 case Expr::ExprWithCleanupsClass:
406 case Expr::CStyleCastExprClass:
407 case Expr::CXXFunctionalCastExprClass:
408 case Expr::CXXStaticCastExprClass:
409 case Expr::CXXDynamicCastExprClass:
410 case Expr::CXXReinterpretCastExprClass:
411 case Expr::CXXConstCastExprClass:
412 case Expr::CXXAddrspaceCastExprClass:
413 case Expr::ObjCBridgedCastExprClass:
414 case Expr::BuiltinBitCastExprClass:
419 case Expr::CXXUnresolvedConstructExprClass:
423 case Expr::BinaryConditionalOperatorClass: {
429 case Expr::ConditionalOperatorClass: {
438 case Expr::ObjCMessageExprClass:
447 case Expr::CXXConstructExprClass:
448 case Expr::CXXInheritedCtorInitExprClass:
449 case Expr::CXXTemporaryObjectExprClass:
450 case Expr::LambdaExprClass:
451 case Expr::CXXStdInitializerListExprClass:
454 case Expr::VAArgExprClass:
457 case Expr::DesignatedInitExprClass:
460 case Expr::StmtExprClass: {
462 if (
const auto *LastExpr = dyn_cast_or_null<Expr>(S->
body_back()))
467 case Expr::PackExpansionExprClass:
470 case Expr::MaterializeTemporaryExprClass:
475 case Expr::InitListExprClass:
483 "Only 1-element init lists can be glvalues.");
486 case Expr::CoawaitExprClass:
487 case Expr::CoyieldExprClass:
489 case Expr::SYCLUniqueStableNameExprClass:
490 case Expr::OpenACCAsteriskSizeExprClass:
494 case Expr::CXXParenListInitExprClass:
500 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 ...