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())
263 case Expr::MatrixSubscriptExprClass:
268 case Expr::DeclRefExprClass:
275 case Expr::MemberExprClass:
278 case Expr::UnaryOperatorClass:
314 case Expr::RecoveryExprClass:
315 case Expr::OpaqueValueExprClass:
319 case Expr::PseudoObjectExprClass:
325 case Expr::ImplicitCastExprClass:
330 case Expr::ParenExprClass:
336 case Expr::GenericSelectionExprClass:
341 case Expr::BinaryOperatorClass:
342 case Expr::CompoundAssignOperatorClass:
348 case Expr::CallExprClass:
349 case Expr::CXXOperatorCallExprClass:
350 case Expr::CXXMemberCallExprClass:
351 case Expr::UserDefinedLiteralClass:
352 case Expr::CUDAKernelCallExprClass:
355 case Expr::CXXRewrittenBinaryOperatorClass:
360 case Expr::ChooseExprClass:
365 case Expr::ExtVectorElementExprClass:
373 case Expr::CXXDefaultArgExprClass:
377 case Expr::CXXDefaultInitExprClass:
381 case Expr::CXXBindTemporaryExprClass:
385 case Expr::ExprWithCleanupsClass:
389 case Expr::CStyleCastExprClass:
390 case Expr::CXXFunctionalCastExprClass:
391 case Expr::CXXStaticCastExprClass:
392 case Expr::CXXDynamicCastExprClass:
393 case Expr::CXXReinterpretCastExprClass:
394 case Expr::CXXConstCastExprClass:
395 case Expr::CXXAddrspaceCastExprClass:
396 case Expr::ObjCBridgedCastExprClass:
397 case Expr::BuiltinBitCastExprClass:
402 case Expr::CXXUnresolvedConstructExprClass:
406 case Expr::BinaryConditionalOperatorClass: {
412 case Expr::ConditionalOperatorClass: {
421 case Expr::ObjCMessageExprClass:
430 case Expr::CXXConstructExprClass:
431 case Expr::CXXInheritedCtorInitExprClass:
432 case Expr::CXXTemporaryObjectExprClass:
433 case Expr::LambdaExprClass:
434 case Expr::CXXStdInitializerListExprClass:
437 case Expr::VAArgExprClass:
440 case Expr::DesignatedInitExprClass:
443 case Expr::StmtExprClass: {
445 if (
const auto *LastExpr = dyn_cast_or_null<Expr>(S->
body_back()))
450 case Expr::PackExpansionExprClass:
453 case Expr::MaterializeTemporaryExprClass:
458 case Expr::InitListExprClass:
466 "Only 1-element init lists can be glvalues.");
469 case Expr::CoawaitExprClass:
470 case Expr::CoyieldExprClass:
472 case Expr::SYCLUniqueStableNameExprClass:
473 case Expr::OpenACCAsteriskSizeExprClass:
477 case Expr::CXXParenListInitExprClass:
483 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 ...
CanQualType getCanonicalType(QualType T) const
Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...