114#define ABSTRACT_STMT(Kind)
115#define STMT(Kind, Base) case Expr::Kind##Class:
116#define EXPR(Kind, Base)
117#include "clang/AST/StmtNodes.inc"
118 llvm_unreachable(
"cannot classify a statement");
121 case Expr::ObjCIsaExprClass:
123 case Expr::ObjCSubscriptRefExprClass:
124 case Expr::ObjCPropertyRefExprClass:
126 case Expr::CXXTypeidExprClass:
127 case Expr::CXXUuidofExprClass:
130 case Expr::UnresolvedLookupExprClass:
131 case Expr::UnresolvedMemberExprClass:
132 case Expr::DependentCoawaitExprClass:
133 case Expr::CXXDependentScopeMemberExprClass:
134 case Expr::DependentScopeDeclRefExprClass:
137 case Expr::ObjCIvarRefExprClass:
138 case Expr::FunctionParmPackExprClass:
139 case Expr::MSPropertyRefExprClass:
140 case Expr::MSPropertySubscriptExprClass:
141 case Expr::ArraySectionExprClass:
142 case Expr::OMPArrayShapingExprClass:
143 case Expr::OMPIteratorExprClass:
144 case Expr::HLSLOutArgExprClass:
148 case Expr::StringLiteralClass:
150 case Expr::ObjCEncodeExprClass:
158 case Expr::PredefinedExprClass: {
161 if (PE->isTransparent())
169 case Expr::CompoundLiteralExprClass:
173 case Expr::CXXBoolLiteralExprClass:
174 case Expr::CXXPseudoDestructorExprClass:
175 case Expr::UnaryExprOrTypeTraitExprClass:
176 case Expr::CXXNewExprClass:
177 case Expr::CXXNullPtrLiteralExprClass:
178 case Expr::ImaginaryLiteralClass:
179 case Expr::GNUNullExprClass:
180 case Expr::OffsetOfExprClass:
181 case Expr::CXXThrowExprClass:
182 case Expr::ShuffleVectorExprClass:
183 case Expr::ConvertVectorExprClass:
184 case Expr::IntegerLiteralClass:
185 case Expr::FixedPointLiteralClass:
186 case Expr::CharacterLiteralClass:
187 case Expr::AddrLabelExprClass:
188 case Expr::CXXDeleteExprClass:
189 case Expr::ImplicitValueInitExprClass:
190 case Expr::BlockExprClass:
191 case Expr::FloatingLiteralClass:
192 case Expr::CXXNoexceptExprClass:
193 case Expr::CXXScalarValueInitExprClass:
194 case Expr::TypeTraitExprClass:
195 case Expr::ArrayTypeTraitExprClass:
196 case Expr::ExpressionTraitExprClass:
197 case Expr::ObjCSelectorExprClass:
198 case Expr::ObjCProtocolExprClass:
199 case Expr::ObjCStringLiteralClass:
200 case Expr::ObjCBoxedExprClass:
201 case Expr::ObjCArrayLiteralClass:
202 case Expr::ObjCDictionaryLiteralClass:
203 case Expr::ObjCBoolLiteralExprClass:
204 case Expr::ObjCAvailabilityCheckExprClass:
205 case Expr::ParenListExprClass:
206 case Expr::SizeOfPackExprClass:
207 case Expr::SubstNonTypeTemplateParmPackExprClass:
208 case Expr::AsTypeExprClass:
209 case Expr::ObjCIndirectCopyRestoreExprClass:
210 case Expr::AtomicExprClass:
211 case Expr::CXXFoldExprClass:
212 case Expr::ArrayInitLoopExprClass:
213 case Expr::ArrayInitIndexExprClass:
214 case Expr::NoInitExprClass:
215 case Expr::DesignatedInitUpdateExprClass:
216 case Expr::SourceLocExprClass:
217 case Expr::ConceptSpecializationExprClass:
218 case Expr::RequiresExprClass:
221 case Expr::EmbedExprClass:
227 case Expr::CXXThisExprClass:
230 case Expr::ConstantExprClass:
234 case Expr::SubstNonTypeTemplateParmExprClass:
238 case Expr::PackIndexingExprClass: {
250 case Expr::ArraySubscriptExprClass:
253 if (Lang.CPlusPlus11) {
257 if (
Base->getType()->isArrayType())
262 case Expr::MatrixSingleSubscriptExprClass:
266 case Expr::MatrixSubscriptExprClass:
271 case Expr::DeclRefExprClass:
278 case Expr::MemberExprClass:
281 case Expr::UnaryOperatorClass:
317 case Expr::RecoveryExprClass:
318 case Expr::OpaqueValueExprClass:
322 case Expr::PseudoObjectExprClass:
328 case Expr::ImplicitCastExprClass:
333 case Expr::ParenExprClass:
339 case Expr::GenericSelectionExprClass:
344 case Expr::BinaryOperatorClass:
345 case Expr::CompoundAssignOperatorClass:
351 case Expr::CallExprClass:
352 case Expr::CXXOperatorCallExprClass:
353 case Expr::CXXMemberCallExprClass:
354 case Expr::UserDefinedLiteralClass:
355 case Expr::CUDAKernelCallExprClass:
358 case Expr::CXXRewrittenBinaryOperatorClass:
363 case Expr::ChooseExprClass:
368 case Expr::ExtVectorElementExprClass:
376 case Expr::CXXDefaultArgExprClass:
380 case Expr::CXXDefaultInitExprClass:
384 case Expr::CXXBindTemporaryExprClass:
388 case Expr::ExprWithCleanupsClass:
392 case Expr::CStyleCastExprClass:
393 case Expr::CXXFunctionalCastExprClass:
394 case Expr::CXXStaticCastExprClass:
395 case Expr::CXXDynamicCastExprClass:
396 case Expr::CXXReinterpretCastExprClass:
397 case Expr::CXXConstCastExprClass:
398 case Expr::CXXAddrspaceCastExprClass:
399 case Expr::ObjCBridgedCastExprClass:
400 case Expr::BuiltinBitCastExprClass:
405 case Expr::CXXUnresolvedConstructExprClass:
409 case Expr::BinaryConditionalOperatorClass: {
415 case Expr::ConditionalOperatorClass: {
424 case Expr::ObjCMessageExprClass:
433 case Expr::CXXConstructExprClass:
434 case Expr::CXXInheritedCtorInitExprClass:
435 case Expr::CXXTemporaryObjectExprClass:
436 case Expr::LambdaExprClass:
437 case Expr::CXXStdInitializerListExprClass:
440 case Expr::VAArgExprClass:
443 case Expr::DesignatedInitExprClass:
446 case Expr::StmtExprClass: {
448 if (
const auto *LastExpr = dyn_cast_or_null<Expr>(S->
body_back()))
453 case Expr::PackExpansionExprClass:
456 case Expr::MaterializeTemporaryExprClass:
461 case Expr::InitListExprClass:
469 "Only 1-element init lists can be glvalues.");
472 case Expr::CoawaitExprClass:
473 case Expr::CoyieldExprClass:
475 case Expr::SYCLUniqueStableNameExprClass:
476 case Expr::OpenACCAsteriskSizeExprClass:
480 case Expr::CXXParenListInitExprClass:
486 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 ...