21 using namespace clang;
37 case OO_Call:
case OO_Subscript:
53 if (RD->isPolymorphic() && E->
isGLValue())
60 assert(
isTypeOperand() &&
"Cannot call getTypeOperand for typeid(expr)");
67 assert(
isTypeOperand() &&
"Cannot call getTypeOperand for __uuidof(expr)");
81 bool PassAlignment,
bool usualArrayDeleteWantsSize,
89 ty->isDependentType(), ty->isDependentType(),
90 ty->isInstantiationDependentType(),
91 ty->containsUnexpandedParameterPack()),
92 SubExprs(nullptr), OperatorNew(operatorNew), OperatorDelete(operatorDelete),
93 AllocatedTypeInfo(allocatedTypeInfo), TypeIdParens(typeIdParens),
94 Range(Range), DirectInitRange(directInitRange),
95 GlobalNew(globalNew), PassAlignment(PassAlignment),
96 UsualArrayDeleteWantsSize(usualArrayDeleteWantsSize) {
97 assert((initializer !=
nullptr || initializationStyle ==
NoInit) &&
98 "Only NoInit can have no initializer.");
99 StoredInitializationStyle = initializer ? initializationStyle + 1 : 0;
101 initializer !=
nullptr);
105 ExprBits.InstantiationDependent =
true;
108 ExprBits.ContainsUnexpandedParameterPack =
true;
110 SubExprs[i++] = arraySize;
115 ExprBits.InstantiationDependent =
true;
118 ExprBits.ContainsUnexpandedParameterPack =
true;
120 SubExprs[i++] = initializer;
123 for (
unsigned j = 0; j != placementArgs.size(); ++j) {
125 ExprBits.InstantiationDependent =
true;
127 ExprBits.ContainsUnexpandedParameterPack =
true;
129 SubExprs[i++] = placementArgs[j];
145 unsigned numPlaceArgs,
bool hasInitializer){
146 assert(SubExprs ==
nullptr &&
"SubExprs already allocated");
148 NumPlacementArgs = numPlaceArgs;
150 unsigned TotalSize = Array + hasInitializer + NumPlacementArgs;
151 SubExprs =
new (C)
Stmt*[TotalSize];
184 :
Expr(CXXPseudoDestructorExprClass,
185 Context.BoundMemberTy,
187 (Base->isTypeDependent() ||
188 (DestroyedType.getTypeSourceInfo() &&
189 DestroyedType.getTypeSourceInfo()->getType()->isDependentType())),
190 Base->isValueDependent(),
191 (Base->isInstantiationDependent() ||
193 QualifierLoc.getNestedNameSpecifier()->isInstantiationDependent()) ||
195 ScopeType->getType()->isInstantiationDependentType()) ||
196 (DestroyedType.getTypeSourceInfo() &&
197 DestroyedType.getTypeSourceInfo()->getType()
198 ->isInstantiationDependentType())),
200 (Base->containsUnexpandedParameterPack() ||
202 QualifierLoc.getNestedNameSpecifier()
203 ->containsUnexpandedParameterPack()) ||
205 ScopeType->getType()->containsUnexpandedParameterPack()) ||
206 (DestroyedType.getTypeSourceInfo() &&
207 DestroyedType.getTypeSourceInfo()->getType()
208 ->containsUnexpandedParameterPack()))),
209 Base(static_cast<
Stmt *>(Base)), IsArrow(isArrow),
210 OperatorLoc(OperatorLoc), QualifierLoc(QualifierLoc),
211 ScopeType(ScopeType), ColonColonLoc(ColonColonLoc), TildeLoc(TildeLoc),
212 DestroyedType(DestroyedType) { }
216 return TInfo->getType();
224 End = TInfo->getTypeLoc().getLocalSourceRange().getEnd();
240 assert(Args || TemplateKWLoc.
isValid());
241 unsigned num_args = Args ? Args->
size() : 0;
244 totalSizeToAlloc<ASTTemplateKWAndArgsInfo, TemplateArgumentLoc>(1,
248 TemplateKWLoc, NameInfo,
255 bool HasTemplateKWAndArgsInfo,
256 unsigned NumTemplateArgs) {
257 assert(NumTemplateArgs == 0 || HasTemplateKWAndArgsInfo);
259 totalSizeToAlloc<ASTTemplateKWAndArgsInfo, TemplateArgumentLoc>(
275 bool KnownInstantiationDependent,
276 bool KnownContainsUnexpandedParameterPack)
279 (KnownInstantiationDependent ||
280 NameInfo.isInstantiationDependent() ||
282 QualifierLoc.getNestedNameSpecifier()->isInstantiationDependent())),
283 (KnownContainsUnexpandedParameterPack ||
284 NameInfo.containsUnexpandedParameterPack() ||
286 QualifierLoc.getNestedNameSpecifier()
287 ->containsUnexpandedParameterPack()))),
288 NameInfo(NameInfo), QualifierLoc(QualifierLoc),
289 Results(nullptr), NumResults(End - Begin),
290 HasTemplateKWAndArgsInfo(TemplateArgs != nullptr ||
291 TemplateKWLoc.isValid()) {
292 NumResults = End -
Begin;
296 if ((*I)->getDeclContext()->isDependentContext() ||
297 isa<UnresolvedUsingValueDecl>(*I)) {
300 ExprBits.InstantiationDependent =
true;
313 bool Dependent =
false;
314 bool InstantiationDependent =
false;
315 bool ContainsUnexpandedParameterPack =
false;
318 Dependent, InstantiationDependent, ContainsUnexpandedParameterPack);
324 if (InstantiationDependent)
325 ExprBits.InstantiationDependent =
true;
326 if (ContainsUnexpandedParameterPack)
327 ExprBits.ContainsUnexpandedParameterPack =
true;
328 }
else if (TemplateKWLoc.
isValid()) {
339 assert(!Results &&
"Results already initialized!");
340 NumResults = End -
Begin;
351 if (isa<UnresolvedLookupExpr>(
this))
358 DependentScopeDeclRefExpr::DependentScopeDeclRefExpr(
QualType T,
365 (NameInfo.isInstantiationDependent() ||
367 QualifierLoc.getNestedNameSpecifier()->isInstantiationDependent())),
368 (NameInfo.containsUnexpandedParameterPack() ||
370 QualifierLoc.getNestedNameSpecifier()
371 ->containsUnexpandedParameterPack()))),
372 QualifierLoc(QualifierLoc), NameInfo(NameInfo),
373 HasTemplateKWAndArgsInfo(Args != nullptr || TemplateKWLoc.isValid())
376 bool Dependent =
true;
377 bool InstantiationDependent =
true;
378 bool ContainsUnexpandedParameterPack
379 =
ExprBits.ContainsUnexpandedParameterPack;
380 getTrailingObjects<ASTTemplateKWAndArgsInfo>()->initializeFrom(
381 TemplateKWLoc, *Args, getTrailingObjects<TemplateArgumentLoc>(),
382 Dependent, InstantiationDependent, ContainsUnexpandedParameterPack);
383 ExprBits.ContainsUnexpandedParameterPack = ContainsUnexpandedParameterPack;
384 }
else if (TemplateKWLoc.
isValid()) {
385 getTrailingObjects<ASTTemplateKWAndArgsInfo>()->initializeFrom(
396 assert(QualifierLoc &&
"should be created for dependent qualifiers");
397 bool HasTemplateKWAndArgsInfo = Args || TemplateKWLoc.
isValid();
399 totalSizeToAlloc<ASTTemplateKWAndArgsInfo, TemplateArgumentLoc>(
400 HasTemplateKWAndArgsInfo, Args ? Args->
size() : 0);
403 TemplateKWLoc, NameInfo, Args);
408 bool HasTemplateKWAndArgsInfo,
409 unsigned NumTemplateArgs) {
410 assert(NumTemplateArgs == 0 || HasTemplateKWAndArgsInfo);
412 totalSizeToAlloc<ASTTemplateKWAndArgsInfo, TemplateArgumentLoc>(
413 HasTemplateKWAndArgsInfo, NumTemplateArgs);
419 E->HasTemplateKWAndArgsInfo = HasTemplateKWAndArgsInfo;
424 if (isa<CXXTemporaryObjectExpr>(
this))
425 return cast<CXXTemporaryObjectExpr>(
this)->
getLocStart();
430 if (isa<CXXTemporaryObjectExpr>(
this))
431 return cast<CXXTemporaryObjectExpr>(
this)->
getLocEnd();
433 if (ParenOrBraceRange.
isValid())
434 return ParenOrBraceRange.
getEnd();
451 SourceRange CXXOperatorCallExpr::getSourceRangeImpl()
const {
453 if (Kind == OO_PlusPlus || Kind == OO_MinusMinus) {
460 }
else if (Kind == OO_Arrow) {
462 }
else if (Kind == OO_Call) {
464 }
else if (Kind == OO_Subscript) {
477 if (
const MemberExpr *MemExpr = dyn_cast<MemberExpr>(Callee))
478 return MemExpr->getBase();
480 if (BO->getOpcode() == BO_PtrMemD || BO->getOpcode() == BO_PtrMemI)
490 return cast<CXXMethodDecl>(MemExpr->getMemberDecl());
518 case CXXStaticCastExprClass:
return "static_cast";
519 case CXXDynamicCastExprClass:
return "dynamic_cast";
520 case CXXReinterpretCastExprClass:
return "reinterpret_cast";
521 case CXXConstCastExprClass:
return "const_cast";
522 default:
return "<invalid cast>";
534 unsigned PathSize = (BasePath ? BasePath->size() : 0);
535 void *
Buffer = C.
Allocate(totalSizeToAlloc<CXXBaseSpecifier *>(PathSize));
538 RParenLoc, AngleBrackets);
540 std::uninitialized_copy_n(BasePath->data(), BasePath->size(),
547 void *
Buffer = C.
Allocate(totalSizeToAlloc<CXXBaseSpecifier *>(PathSize));
559 unsigned PathSize = (BasePath ? BasePath->size() : 0);
560 void *
Buffer = C.
Allocate(totalSizeToAlloc<CXXBaseSpecifier *>(PathSize));
563 RParenLoc, AngleBrackets);
565 std::uninitialized_copy_n(BasePath->data(), BasePath->size(),
572 void *
Buffer = C.
Allocate(totalSizeToAlloc<CXXBaseSpecifier *>(PathSize));
600 if (!SrcRD->
hasAttr<FinalAttr>())
616 unsigned PathSize = (BasePath ? BasePath->size() : 0);
617 void *
Buffer = C.
Allocate(totalSizeToAlloc<CXXBaseSpecifier *>(PathSize));
620 RParenLoc, AngleBrackets);
622 std::uninitialized_copy_n(BasePath->data(), BasePath->size(),
629 void *
Buffer = C.
Allocate(totalSizeToAlloc<CXXBaseSpecifier *>(PathSize));
639 return new (C)
CXXConstCastExpr(T, VK, Op, WrittenTy, L, RParenLoc, AngleBrackets);
651 unsigned PathSize = (BasePath ? BasePath->size() : 0);
652 void *
Buffer = C.
Allocate(totalSizeToAlloc<CXXBaseSpecifier *>(PathSize));
656 std::uninitialized_copy_n(BasePath->data(), BasePath->size(),
663 void *
Buffer = C.
Allocate(totalSizeToAlloc<CXXBaseSpecifier *>(PathSize));
682 assert(
getNumArgs() == 1 &&
"unexpected #args in literal operator call");
684 cast<FunctionDecl>(
getCalleeDecl())->getParamDecl(0)->getType();
694 llvm_unreachable(
"unknown kind of literal operator");
706 return cast<FunctionDecl>(
getCalleeDecl())->getLiteralIdentifier();
711 :
Expr(CXXDefaultInitExprClass, T.getNonLValueExprType(C),
712 T->isLValueReferenceType() ?
VK_LValue : T->isRValueReferenceType()
716 Field(Field), Loc(Loc) {
730 "Expression bound to a temporary must have record or array type!");
741 bool HadMultipleCandidates,
742 bool ListInitialization,
743 bool StdInitListInitialization,
744 bool ZeroInitialization)
746 TSI->getTypeLoc().getBeginLoc(),
748 HadMultipleCandidates,
750 StdInitListInitialization,
757 return Type->getTypeLoc().getBeginLoc();
772 bool HadMultipleCandidates,
773 bool ListInitialization,
774 bool StdInitListInitialization,
775 bool ZeroInitialization,
779 Ctor, Elidable, Args,
780 HadMultipleCandidates, ListInitialization,
781 StdInitListInitialization,
782 ZeroInitialization, ConstructKind,
791 bool HadMultipleCandidates,
792 bool ListInitialization,
793 bool StdInitListInitialization,
794 bool ZeroInitialization,
798 T->isDependentType(), T->isDependentType(),
799 T->isInstantiationDependentType(),
800 T->containsUnexpandedParameterPack()),
801 Constructor(Ctor), Loc(Loc), ParenOrBraceRange(ParenOrBraceRange),
802 NumArgs(Args.size()),
803 Elidable(Elidable), HadMultipleCandidates(HadMultipleCandidates),
804 ListInitialization(ListInitialization),
805 StdInitListInitialization(StdInitListInitialization),
806 ZeroInitialization(ZeroInitialization),
807 ConstructKind(ConstructKind), Args(nullptr)
810 this->Args =
new (C)
Stmt*[Args.size()];
812 for (
unsigned i = 0; i != Args.size(); ++i) {
813 assert(Args[i] &&
"NULL argument in CXXConstructExpr");
818 ExprBits.InstantiationDependent =
true;
820 ExprBits.ContainsUnexpandedParameterPack =
true;
822 this->Args[i] = Args[i];
830 : DeclAndBits(Var, 0), Loc(Loc), EllipsisLoc(EllipsisLoc)
834 Bits |= Capture_Implicit;
838 Bits |= Capture_ByCopy;
841 assert(!Var &&
"'this' capture cannot have a variable!");
842 Bits |= Capture_This;
846 Bits |= Capture_ByCopy;
849 assert(Var &&
"capture must have a variable!");
852 assert(!Var &&
"VLA type capture cannot have a variable!");
855 DeclAndBits.setInt(Bits);
861 bool CapByCopy = DeclAndBits.getInt() & Capture_ByCopy;
873 bool ContainsUnexpandedParameterPack)
875 T->isDependentType(), T->isDependentType(),
876 ContainsUnexpandedParameterPack),
877 IntroducerRange(IntroducerRange), CaptureDefaultLoc(CaptureDefaultLoc),
878 NumCaptures(Captures.size()), CaptureDefault(CaptureDefault),
879 ExplicitParams(ExplicitParams), ExplicitResultType(ExplicitResultType),
880 ClosingBrace(ClosingBrace) {
881 assert(CaptureInits.size() == Captures.size() &&
"Wrong number of arguments");
883 CXXRecordDecl::LambdaDefinitionData &Data = Class->getLambdaData();
889 Data.NumCaptures = NumCaptures;
890 Data.NumExplicitCaptures = 0;
894 for (
unsigned I = 0, N = Captures.size();
I != N; ++
I) {
896 ++Data.NumExplicitCaptures;
898 *ToCapture++ = Captures[
I];
902 Stmt **Stored = getStoredStmts();
903 for (
unsigned I = 0, N = CaptureInits.size();
I != N; ++
I)
904 *Stored++ = CaptureInits[
I];
907 *Stored++ = getCallOperator()->getBody();
914 bool ExplicitParams,
bool ExplicitResultType,
ArrayRef<Expr *> CaptureInits,
915 SourceLocation ClosingBrace,
bool ContainsUnexpandedParameterPack) {
920 unsigned Size = totalSizeToAlloc<Stmt *>(Captures.size() + 1);
923 LambdaExpr(T, IntroducerRange, CaptureDefault, CaptureDefaultLoc,
924 Captures, ExplicitParams, ExplicitResultType, CaptureInits,
925 ClosingBrace, ContainsUnexpandedParameterPack);
929 unsigned NumCaptures) {
930 unsigned Size = totalSizeToAlloc<Stmt *>(NumCaptures + 1);
957 struct CXXRecordDecl::LambdaDefinitionData &Data
959 return Data.Captures + Data.NumExplicitCaptures;
997 if (!getStoredStmts()[NumCaptures])
998 *
const_cast<clang::Stmt **
>(&getStoredStmts()[NumCaptures]) =
1001 return static_cast<CompoundStmt *
>(getStoredStmts()[NumCaptures]);
1008 ExprWithCleanups::ExprWithCleanups(
Expr *subexpr,
1009 bool CleanupsHaveSideEffects,
1011 :
Expr(ExprWithCleanupsClass, subexpr->getType(),
1012 subexpr->getValueKind(), subexpr->getObjectKind(),
1013 subexpr->isTypeDependent(), subexpr->isValueDependent(),
1014 subexpr->isInstantiationDependent(),
1015 subexpr->containsUnexpandedParameterPack()),
1019 for (
unsigned i = 0, e = objects.size(); i != e; ++i)
1020 getTrailingObjects<CleanupObject>()[i] = objects[i];
1024 bool CleanupsHaveSideEffects,
1026 void *buffer = C.
Allocate(totalSizeToAlloc<CleanupObject>(objects.size()),
1032 ExprWithCleanups::ExprWithCleanups(EmptyShell empty,
unsigned numObjects)
1033 :
Expr(ExprWithCleanupsClass, empty) {
1039 unsigned numObjects) {
1040 void *buffer = C.
Allocate(totalSizeToAlloc<CleanupObject>(numObjects),
1049 :
Expr(CXXUnresolvedConstructExprClass,
1050 Type->getType().getNonReferenceType(),
1051 (Type->getType()->isLValueReferenceType() ?
VK_LValue
1052 :Type->getType()->isRValueReferenceType()?
VK_XValue
1055 Type->getType()->isDependentType() ||
1056 Type->getType()->getContainedDeducedType(),
1058 Type->getType()->containsUnexpandedParameterPack()),
1060 LParenLoc(LParenLoc),
1061 RParenLoc(RParenLoc),
1062 NumArgs(Args.size()) {
1063 Expr **StoredArgs = getTrailingObjects<Expr *>();
1064 for (
unsigned I = 0;
I != Args.size(); ++
I) {
1066 ExprBits.ContainsUnexpandedParameterPack =
true;
1068 StoredArgs[
I] = Args[
I];
1078 void *Mem = C.
Allocate(totalSizeToAlloc<Expr *>(Args.size()));
1085 void *Mem = C.
Allocate(totalSizeToAlloc<Expr *>(NumArgs));
1093 CXXDependentScopeMemberExpr::CXXDependentScopeMemberExpr(
1099 :
Expr(CXXDependentScopeMemberExprClass, C.DependentTy,
VK_LValue,
1101 ((Base && Base->containsUnexpandedParameterPack()) ||
1103 QualifierLoc.getNestedNameSpecifier()
1104 ->containsUnexpandedParameterPack()) ||
1105 MemberNameInfo.containsUnexpandedParameterPack())),
1106 Base(Base), BaseType(BaseType), IsArrow(IsArrow),
1107 HasTemplateKWAndArgsInfo(TemplateArgs != nullptr ||
1108 TemplateKWLoc.isValid()),
1109 OperatorLoc(OperatorLoc), QualifierLoc(QualifierLoc),
1110 FirstQualifierFoundInScope(FirstQualifierFoundInScope),
1111 MemberNameInfo(MemberNameInfo) {
1113 bool Dependent =
true;
1114 bool InstantiationDependent =
true;
1115 bool ContainsUnexpandedParameterPack =
false;
1116 getTrailingObjects<ASTTemplateKWAndArgsInfo>()->initializeFrom(
1117 TemplateKWLoc, *TemplateArgs, getTrailingObjects<TemplateArgumentLoc>(),
1118 Dependent, InstantiationDependent, ContainsUnexpandedParameterPack);
1119 if (ContainsUnexpandedParameterPack)
1120 ExprBits.ContainsUnexpandedParameterPack =
true;
1121 }
else if (TemplateKWLoc.
isValid()) {
1122 getTrailingObjects<ASTTemplateKWAndArgsInfo>()->initializeFrom(
1136 bool HasTemplateKWAndArgsInfo = TemplateArgs || TemplateKWLoc.
isValid();
1137 unsigned NumTemplateArgs = TemplateArgs ? TemplateArgs->
size() : 0;
1139 totalSizeToAlloc<ASTTemplateKWAndArgsInfo, TemplateArgumentLoc>(
1140 HasTemplateKWAndArgsInfo, NumTemplateArgs);
1144 IsArrow, OperatorLoc,
1147 FirstQualifierFoundInScope,
1148 MemberNameInfo, TemplateArgs);
1153 bool HasTemplateKWAndArgsInfo,
1154 unsigned NumTemplateArgs) {
1155 assert(NumTemplateArgs == 0 || HasTemplateKWAndArgsInfo);
1157 totalSizeToAlloc<ASTTemplateKWAndArgsInfo, TemplateArgumentLoc>(
1158 HasTemplateKWAndArgsInfo, NumTemplateArgs);
1166 E->HasTemplateKWAndArgsInfo = HasTemplateKWAndArgsInfo;
1181 if (isa<UnresolvedUsingValueDecl>(decl))
1189 }
while (++begin != end);
1194 UnresolvedMemberExpr::UnresolvedMemberExpr(
const ASTContext &C,
1195 bool HasUnresolvedUsing,
1205 :
OverloadExpr(UnresolvedMemberExprClass, C, QualifierLoc, TemplateKWLoc,
1206 MemberNameInfo, TemplateArgs, Begin, End,
1208 ((Base && Base->isTypeDependent()) ||
1209 BaseType->isDependentType()),
1210 ((Base && Base->isInstantiationDependent()) ||
1211 BaseType->isInstantiationDependentType()),
1213 ((Base && Base->containsUnexpandedParameterPack()) ||
1214 BaseType->containsUnexpandedParameterPack())),
1215 IsArrow(IsArrow), HasUnresolvedUsing(HasUnresolvedUsing),
1216 Base(Base), BaseType(BaseType), OperatorLoc(OperatorLoc) {
1224 bool UnresolvedMemberExpr::isImplicitAccess()
const {
1240 totalSizeToAlloc<ASTTemplateKWAndArgsInfo, TemplateArgumentLoc>(
1245 C, HasUnresolvedUsing, Base, BaseType, IsArrow, OperatorLoc, QualifierLoc,
1246 TemplateKWLoc, MemberNameInfo, TemplateArgs, Begin, End);
1251 bool HasTemplateKWAndArgsInfo,
1252 unsigned NumTemplateArgs) {
1253 assert(NumTemplateArgs == 0 || HasTemplateKWAndArgsInfo);
1255 totalSizeToAlloc<ASTTemplateKWAndArgsInfo, TemplateArgumentLoc>(
1274 assert(T &&
"qualifier in member expression does not name type");
1276 assert(Record &&
"qualifier in member expression does not name record");
1283 assert(PT &&
"base of arrow member access is not pointer");
1288 assert(Record &&
"base of member expression does not name record");
1301 Context.
Allocate(totalSizeToAlloc<TemplateArgument>(PartialArgs.size()));
1303 PackLoc, RParenLoc,
Length, PartialArgs);
1307 unsigned NumPartialArgs) {
1309 Context.
Allocate(totalSizeToAlloc<TemplateArgument>(NumPartialArgs));
1313 SubstNonTypeTemplateParmPackExpr::
1320 Param(Param), Arguments(ArgPack.pack_begin()),
1321 NumArguments(ArgPack.pack_size()), NameLoc(NameLoc) { }
1333 ParamPack(ParamPack), NameLoc(NameLoc), NumParameters(NumParams) {
1335 std::uninitialized_copy(Params, Params + NumParams,
1336 getTrailingObjects<ParmVarDecl *>());
1343 return new (Context.
Allocate(totalSizeToAlloc<ParmVarDecl *>(Params.size())))
1349 unsigned NumParams) {
1350 return new (Context.
Allocate(totalSizeToAlloc<ParmVarDecl *>(NumParams)))
1355 unsigned ManglingNumber) {
1362 if (!
State.is<ExtraState *>()) {
1368 auto ES =
State.get<ExtraState *>();
1369 ES->ExtendingDecl = ExtendedBy;
1370 ES->ManglingNumber = ManglingNumber;
1382 Loc(Loc), RParenLoc(RParenLoc)
1388 TypeSourceInfo **ToArgs = getTrailingObjects<TypeSourceInfo *>();
1390 for (
unsigned I = 0, N = Args.size();
I != N; ++
I) {
1398 ToArgs[
I] = Args[
I];
1408 void *Mem = C.
Allocate(totalSizeToAlloc<TypeSourceInfo *>(Args.size()));
1409 return new (Mem)
TypeTraitExpr(T, Loc, Kind, Args, RParenLoc, Value);
1414 void *Mem = C.
Allocate(totalSizeToAlloc<TypeSourceInfo *>(NumArgs));
1418 void ArrayTypeTraitExpr::anchor() { }
Raw form: operator "" X (const char *)
SourceRange getParenOrBraceRange() const
void setValueDependent(bool VD)
Set whether this expression is value-dependent or not.
Defines the clang::ASTContext interface.
LiteralOperatorKind
The kind of literal operator which is invoked.
operator "" X (long double)
SourceLocation getEnd() const
StmtClass getStmtClass() const
FunctionDecl - An instance of this class is created to represent a function declaration or definition...
bool isDerivedFrom(const CXXRecordDecl *Base) const
Determine whether this class is derived from the class Base.
PointerType - C99 6.7.5.1 - Pointer Declarators.
Stores the type being destroyed by a pseudo-destructor expression.
A (possibly-)qualified type.
bool containsUnexpandedParameterPack() const
Whether this expression contains an unexpanded parameter pack (for C++11 variadic templates)...
Expr * getArg(unsigned Arg)
getArg - Return the specified argument.
__SIZE_TYPE__ size_t
The unsigned integer type of the result of the sizeof operator.
static CXXDependentScopeMemberExpr * Create(const ASTContext &C, Expr *Base, QualType BaseType, bool IsArrow, SourceLocation OperatorLoc, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierFoundInScope, DeclarationNameInfo MemberNameInfo, const TemplateArgumentListInfo *TemplateArgs)
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
bool isInstantiationDependentType() const
Determine whether this type is an instantiation-dependent type, meaning that the type involves a temp...
static UnresolvedLookupExpr * Create(const ASTContext &C, CXXRecordDecl *NamingClass, NestedNameSpecifierLoc QualifierLoc, const DeclarationNameInfo &NameInfo, bool ADL, bool Overloaded, UnresolvedSetIterator Begin, UnresolvedSetIterator End)
Stmt - This represents one statement.
bool isAnyCharacterType() const
Determine whether this type is any of the built-in character types.
LambdaCapture(SourceLocation Loc, bool Implicit, LambdaCaptureKind Kind, VarDecl *Var=nullptr, SourceLocation EllipsisLoc=SourceLocation())
Create a new capture of a variable or of this.
CanQualType getSizeType() const
Return the unique type for "size_t" (C99 7.17), defined in <stddef.h>.
static CXXDynamicCastExpr * Create(const ASTContext &Context, QualType T, ExprValueKind VK, CastKind Kind, Expr *Op, const CXXCastPath *Path, TypeSourceInfo *Written, SourceLocation L, SourceLocation RParenLoc, SourceRange AngleBrackets)
Microsoft's '__super' specifier, stored as a CXXRecordDecl* of the class it appeared in...
bool isRecordType() const
LambdaCaptureDefault
The default, if any, capture method for a lambda expression.
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
Defines the C++ template declaration subclasses.
capture_range captures() const
Retrieve this lambda's captures.
The base class of the type hierarchy.
std::unique_ptr< llvm::MemoryBuffer > Buffer
Represents a call to a C++ constructor.
A container of type source information.
SourceLocation getLocStart() const LLVM_READONLY
static CXXFunctionalCastExpr * Create(const ASTContext &Context, QualType T, ExprValueKind VK, TypeSourceInfo *Written, CastKind Kind, Expr *Op, const CXXCastPath *Path, SourceLocation LPLoc, SourceLocation RPLoc)
Describes the capture of a variable or of this, or of a C++1y init-capture.
Represents a C++ constructor within a class.
SourceLocation getLocEnd() const LLVM_READONLY
capture_iterator capture_begin() const
Retrieve an iterator pointing to the first lambda capture.
static CXXConstructExpr * Create(const ASTContext &C, QualType T, SourceLocation Loc, CXXConstructorDecl *Ctor, bool Elidable, ArrayRef< Expr * > Args, bool HadMultipleCandidates, bool ListInitialization, bool StdInitListInitialization, bool ZeroInitialization, ConstructionKind ConstructKind, SourceRange ParenOrBraceRange)
SourceRange getSourceRange() const LLVM_READONLY
VarDecl - An instance of this class is created to represent a variable declaration or definition...
const Expr * getCallee() const
SourceLocation getLocEnd() const LLVM_READONLY
static FunctionParmPackExpr * CreateEmpty(const ASTContext &Context, unsigned NumParams)
static DependentScopeDeclRefExpr * CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
NamedDecl * getUnderlyingDecl()
Looks through UsingDecls and ObjCCompatibleAliasDecls for the underlying named decl.
CXXNewExpr(const ASTContext &C, bool globalNew, FunctionDecl *operatorNew, FunctionDecl *operatorDelete, bool PassAlignment, bool usualArrayDeleteWantsSize, ArrayRef< Expr * > placementArgs, SourceRange typeIdParens, Expr *arraySize, InitializationStyle initializationStyle, Expr *initializer, QualType ty, TypeSourceInfo *AllocatedTypeInfo, SourceRange Range, SourceRange directInitRange)
Stores a list of template parameters for a TemplateDecl and its derived classes.
SourceLocation getOperatorLoc() const
Returns the location of the operator symbol in the expression.
void setContainsUnexpandedParameterPack(bool PP=true)
Set the bit that describes whether this expression contains an unexpanded parameter pack...
void initializeResults(const ASTContext &C, UnresolvedSetIterator Begin, UnresolvedSetIterator End)
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
bool containsUnexpandedParameterPack() const
Whether this type is or contains an unexpanded parameter pack, used to support C++0x variadic templat...
ParmVarDecl - Represents a parameter to a function.
QualType getBaseType() const
Defines the clang::Expr interface and subclasses for C++ expressions.
The collection of all-type qualifiers we support.
A C++ static_cast expression (C++ [expr.static.cast]).
static CXXUnresolvedConstructExpr * Create(const ASTContext &C, TypeSourceInfo *Type, SourceLocation LParenLoc, ArrayRef< Expr * > Args, SourceLocation RParenLoc)
void AllocateArgsArray(const ASTContext &C, bool isArray, unsigned numPlaceArgs, bool hasInitializer)
bool isInfixBinaryOp() const
Is this written as an infix binary operator?
One of these records is kept for each identifier that is lexed.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
A C++ nested-name-specifier augmented with source location information.
bool isImplicitCXXThis() const
Whether this expression is an implicit reference to 'this' in C++.
LambdaCaptureKind
The different capture forms in a lambda introducer.
FieldDecl - An instance of this class is created by Sema::ActOnField to represent a member of a struc...
bool isAnyPointerType() const
CXXRecordDecl * getNamingClass() const
Gets the naming class of this lookup, if any.
Expr * getImplicitObjectArgument() const
Retrieves the implicit object argument for the member call.
const internal::VariadicAllOfMatcher< Decl > decl
Matches declarations.
The iterator over UnresolvedSets.
SourceRange getLocalSourceRange() const
Get the local source range.
bool isPotentiallyEvaluated() const
Determine whether this typeid has a type operand which is potentially evaluated, per C++11 [expr...
CXXMethodDecl * getCallOperator() const
Retrieve the function call operator associated with this lambda expression.
Represents a C++ member access expression for which lookup produced a set of overloaded functions...
QualType getTypeDeclType(const TypeDecl *Decl, const TypeDecl *PrevDecl=nullptr) const
Return the unique reference to the type for the specified type declaration.
SourceLocation getRParenLoc() const
An r-value expression (a pr-value in the C++11 taxonomy) produces a temporary value.
SourceLocation getBeginLoc() const
Get the begin source location.
bool isAlwaysNull() const
isAlwaysNull - Return whether the result of the dynamic_cast is proven to always be null...
< Capturing the *this object by copy
A convenient class for passing around template argument information.
Expr * getInitializer()
The initializer of this new-expression.
An x-value expression is a reference to an object with independent storage but which can be "moved"...
Expr * getExprOperand() const
capture_iterator capture_end() const
Retrieve an iterator pointing past the end of the sequence of lambda captures.
A builtin binary operation expression such as "x + y" or "x <= y".
bool isValueDependent() const
isValueDependent - Determines whether this expression is value-dependent (C++ [temp.dep.constexpr]).
InitializationStyle getInitializationStyle() const
The kind of initializer this new-expression has.
New-expression has a C++98 paren-delimited initializer.
SourceLocation getLocEnd() const LLVM_READONLY
TypeSourceInfo * getTypeSourceInfo() const
VarDecl * getCapturedVar() const
Retrieve the declaration of the local variable being captured.
QualType getDestroyedType() const
Retrieve the type being destroyed.
Represents binding an expression to a temporary.
CompoundStmt * getBody() const
Retrieve the body of the lambda.
bool capturesVLAType() const
Determine whether this captures a variable length array bound expression.
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
QualType getTypeOperand(ASTContext &Context) const
Retrieves the type operand of this __uuidof() expression after various required adjustments (removing...
TypeSourceInfo * getTypeInfoAsWritten() const
getTypeInfoAsWritten - Returns the type source info for the type that this expression is casting to...
An ordinary object is located at an address in memory.
Represents a C++ member access expression where the actual member referenced could not be resolved be...
capture_iterator implicit_capture_end() const
Retrieve an iterator pointing past the end of the sequence of implicit lambda captures.
detail::InMemoryDirectory::const_iterator I
New-expression has no initializer as written.
TypeTrait
Names for traits that operate specifically on types.
SourceLocation getLocation() const
ASTTemplateKWAndArgsInfo * getTrailingASTTemplateKWAndArgsInfo()
Return the optional template keyword and arguments info.
CompoundStmt - This represents a group of statements like { stmt stmt }.
Represents a prototype with parameter type info, e.g.
CXXMethodDecl * getMethodDecl() const
Retrieves the declaration of the called method.
CastKind
CastKind - The kind of operation required for a conversion.
SourceLocation getLocEnd() const LLVM_READONLY
bool isInstantiationDependent() const
Whether this expression is instantiation-dependent, meaning that it depends in some way on a template...
bool HasTemplateKWAndArgsInfo
Whether the name includes info for explicit template keyword and arguments.
QualType getPointeeType() const
If this is a pointer, ObjC object pointer, or block pointer, this returns the respective pointee...
PseudoDestructorTypeStorage()
bool isMutable() const
Determine whether the lambda is mutable, meaning that any captures values can be modified.
ValueDecl - Represent the declaration of a variable (in which case it is an lvalue) a function (in wh...
Expr - This represents one expression.
ExprValueKind
The categorization of expression values, currently following the C++11 scheme.
SourceLocation getLocStart() const LLVM_READONLY
A C++ const_cast expression (C++ [expr.const.cast]).
Represents a C++ destructor within a class.
New-expression has a C++11 list-initializer.
static CXXStaticCastExpr * Create(const ASTContext &Context, QualType T, ExprValueKind VK, CastKind K, Expr *Op, const CXXCastPath *Path, TypeSourceInfo *Written, SourceLocation L, SourceLocation RParenLoc, SourceRange AngleBrackets)
static CXXReinterpretCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
DeclContext * getDeclContext()
bool isFloatingType() const
Represents an expression that computes the length of a parameter pack.
NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.
static DependentScopeDeclRefExpr * Create(const ASTContext &C, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs)
Defines the clang::TypeLoc interface and its subclasses.
ExprWithCleanupsBitfields ExprWithCleanupsBits
CXXRecordDecl * getNamingClass() const
Retrieve the naming class of this lookup.
bool isExplicit() const
Determine whether this was an explicit capture (written between the square brackets introducing the l...
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
bool shouldNullCheckAllocation(const ASTContext &Ctx) const
True if the allocation result needs to be null-checked.
bool isDependentType() const
Whether this type is a dependent type, meaning that its definition somehow depends on a template para...
CXXMethodDecl * getLambdaCallOperator() const
Retrieve the lambda call operator of the closure type if this is a closure type.
const Type * getAsType() const
Retrieve the type stored in this nested name specifier.
capture_iterator implicit_capture_begin() const
Retrieve an iterator pointing to the first implicit lambda capture.
SourceLocation getLocStart() const LLVM_READONLY
LambdaCaptureKind getCaptureKind() const
Determine the kind of capture.
Stmt * getBody(const FunctionDecl *&Definition) const
getBody - Retrieve the body (definition) of the function.
TypeLoc getTypeLoc() const
Return the TypeLoc wrapper for the type source info.
A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).
SourceLocation getLocStart() const LLVM_READONLY
static CXXConstCastExpr * Create(const ASTContext &Context, QualType T, ExprValueKind VK, Expr *Op, TypeSourceInfo *WrittenTy, SourceLocation L, SourceLocation RParenLoc, SourceRange AngleBrackets)
static CXXBindTemporaryExpr * Create(const ASTContext &C, CXXTemporary *Temp, Expr *SubExpr)
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr...
operator "" X (const CharT *, size_t)
FunctionDecl * getAsFunction() LLVM_READONLY
Returns the function itself, or the templated function if this is a function template.
Raw form: operator "" X<cs...> ()
static CXXDynamicCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
CXXRecordDecl * getRecordDecl() const
Retrieves the CXXRecordDecl for the underlying type of the implicit object argument.
Encodes a location in the source.
Represents a C++ temporary.
static CXXDependentScopeMemberExpr * CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
static CXXConstCastExpr * CreateEmpty(const ASTContext &Context)
bool isValid() const
Return true if this is a valid SourceLocation object.
static SizeOfPackExpr * Create(ASTContext &Context, SourceLocation OperatorLoc, NamedDecl *Pack, SourceLocation PackLoc, SourceLocation RParenLoc, Optional< unsigned > Length=None, ArrayRef< TemplateArgument > PartialArgs=None)
ASTContext & getASTContext() const LLVM_READONLY
CXXConstructExpr(const ASTContext &C, StmtClass SC, QualType T, SourceLocation Loc, CXXConstructorDecl *Ctor, bool Elidable, ArrayRef< Expr * > Args, bool HadMultipleCandidates, bool ListInitialization, bool StdInitListInitialization, bool ZeroInitialization, ConstructionKind ConstructKind, SourceRange ParenOrBraceRange)
OverloadExpr(StmtClass K, const ASTContext &C, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs, UnresolvedSetIterator Begin, UnresolvedSetIterator End, bool KnownDependent, bool KnownInstantiationDependent, bool KnownContainsUnexpandedParameterPack)
TemplateParameterList * getTemplateParameterList() const
If this is a generic lambda expression, retrieve the template parameter list associated with it...
TemplateArgument getArgumentPack() const
Retrieve the template argument pack containing the substituted template arguments.
Represents a static or instance method of a struct/union/class.
static ExprWithCleanups * Create(const ASTContext &C, EmptyShell empty, unsigned numObjects)
CXXTemporaryObjectExpr(const ASTContext &C, CXXConstructorDecl *Cons, QualType Type, TypeSourceInfo *TSI, ArrayRef< Expr * > Args, SourceRange ParenOrBraceRange, bool HadMultipleCandidates, bool ListInitialization, bool StdInitListInitialization, bool ZeroInitialization)
bool isImplicitAccess() const
True if this is an implicit access, i.e.
SourceLocation getLocStart() const LLVM_READONLY
bool isInitCapture(const LambdaCapture *Capture) const
Determine whether one of this lambda's captures is an init-capture.
LiteralOperatorKind getLiteralOperatorKind() const
Returns the kind of literal operator invocation which this expression represents. ...
capture_iterator explicit_capture_end() const
Retrieve an iterator pointing past the end of the sequence of explicit lambda captures.
SourceLocation getBegin() const
bool isTypeDependent() const
isTypeDependent - Determines whether this expression is type-dependent (C++ [temp.dep.expr]), which means that its type could change from one template instantiation to the next.
const T * castAs() const
Member-template castAs<specific type>.
bool isArrow() const
Determine whether this member expression used the '->' operator; otherwise, it used the '...
static SizeOfPackExpr * CreateDeserialized(ASTContext &Context, unsigned NumPartialArgs)
static LambdaExpr * Create(const ASTContext &C, CXXRecordDecl *Class, SourceRange IntroducerRange, LambdaCaptureDefault CaptureDefault, SourceLocation CaptureDefaultLoc, ArrayRef< LambdaCapture > Captures, bool ExplicitParams, bool ExplicitResultType, ArrayRef< Expr * > CaptureInits, SourceLocation ClosingBrace, bool ContainsUnexpandedParameterPack)
Construct a new lambda expression.
QualType getType() const
Return the type wrapped by this type source info.
static CXXReinterpretCastExpr * Create(const ASTContext &Context, QualType T, ExprValueKind VK, CastKind Kind, Expr *Op, const CXXCastPath *Path, TypeSourceInfo *WrittenTy, SourceLocation L, SourceLocation RParenLoc, SourceRange AngleBrackets)
A placeholder type used to construct an empty shell of a type, that will be filled in later (e...
QualType getPointeeType() const
A qualified reference to a name whose declaration cannot yet be resolved.
static bool hasOnlyNonStaticMemberFunctions(UnresolvedSetIterator begin, UnresolvedSetIterator end)
A POD class for pairing a NamedDecl* with an access specifier.
const char * getCastName() const
getCastName - Get the name of the C++ cast being used, e.g., "static_cast", "dynamic_cast", "reinterpret_cast", or "const_cast".
bool isInitCapture() const
Whether this variable is the implicit variable for a lambda init-capture.
if(T->getSizeExpr()) TRY_TO(TraverseStmt(T-> getSizeExpr()))
Represents a reference to a function parameter pack that has been substituted but not yet expanded...
Represents a template argument.
void setExtendingDecl(const ValueDecl *ExtendedBy, unsigned ManglingNumber)
QualType getTypeOperand(ASTContext &Context) const
Retrieves the type operand of this typeid() expression after various required adjustments (removing r...
OverloadedOperatorKind
Enumeration specifying the different kinds of C++ overloaded operators.
SourceLocation getLocStart() const LLVM_READONLY
bool isDefaultArgument() const
Determine whether this expression is a default function argument.
A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).
static LambdaExpr * CreateDeserialized(const ASTContext &C, unsigned NumCaptures)
Construct a new lambda expression that will be deserialized from an external source.
void setInstantiationDependent(bool ID)
Set whether this expression is instantiation-dependent or not.
bool isTypeOperand() const
detail::InMemoryDirectory::const_iterator E
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspnd...
unsigned getNumArgs() const
SourceLocation getLocEnd() const LLVM_READONLY
QualType getNonReferenceType() const
If Type is a reference type (e.g., const int&), returns the type that the reference refers to ("const...
Capturing variable-length array type.
A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...
TemplateArgumentLoc * getTrailingTemplateArgumentLoc()
Return the optional template arguments.
llvm::iterator_range< capture_iterator > capture_range
An iterator over a range of lambda captures.
FunctionDecl * getOperatorNew() const
const T * getAs() const
Member-template getAs<specific type>'.
capture_iterator explicit_capture_begin() const
Retrieve an iterator pointing to the first explicit lambda capture.
static UnresolvedMemberExpr * CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
TypeTraitExprBitfields TypeTraitExprBits
Expr * getArg(unsigned Arg)
Return the specified argument.
CanQualType BoundMemberTy
CXXRecordDecl * getAsCXXRecordDecl() const
Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...
static CXXFunctionalCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize)
Capturing the *this object by reference.
Represents a base class of a C++ class.
TemplateParameterList * getGenericLambdaTemplateParameterList() const
Retrieve the generic lambda's template parameter list.
static FunctionParmPackExpr * Create(const ASTContext &Context, QualType T, ParmVarDecl *ParamPack, SourceLocation NameLoc, ArrayRef< ParmVarDecl * > Params)
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
static UnresolvedMemberExpr * Create(const ASTContext &C, bool HasUnresolvedUsing, Expr *Base, QualType BaseType, bool IsArrow, SourceLocation OperatorLoc, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, const DeclarationNameInfo &MemberNameInfo, const TemplateArgumentListInfo *TemplateArgs, UnresolvedSetIterator Begin, UnresolvedSetIterator End)
static UnresolvedLookupExpr * CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
capture_range explicit_captures() const
Retrieve this lambda's explicit captures.
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate.h) and friends (in DeclFriend.h).
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
OverloadedOperatorKind getOperator() const
Returns the kind of overloaded operator that this expression refers to.
const IdentifierInfo * getUDSuffix() const
Returns the ud-suffix specified for this literal.
void setEnd(SourceLocation e)
Represents a C++ struct/union/class.
static CXXStaticCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize)
SourceLocation getLocStart() const LLVM_READONLY
capture_range implicit_captures() const
Retrieve this lambda's implicit captures.
static CXXTemporary * Create(const ASTContext &C, const CXXDestructorDecl *Destructor)
static CXXUnresolvedConstructExpr * CreateEmpty(const ASTContext &C, unsigned NumArgs)
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr.type.conv]).
static TypeTraitExpr * Create(const ASTContext &C, QualType T, SourceLocation Loc, TypeTrait Kind, ArrayRef< TypeSourceInfo * > Args, SourceLocation RParenLoc, bool Value)
Create a new type trait expression.
static TypeTraitExpr * CreateDeserialized(const ASTContext &C, unsigned NumArgs)
void * Allocate(size_t Size, unsigned Align=8) const
void initializeFrom(SourceLocation TemplateKWLoc, const TemplateArgumentListInfo &List, TemplateArgumentLoc *OutArgArray)
bool isReservedGlobalPlacementOperator() const
Determines whether this operator new or delete is one of the reserved global placement operators: voi...
SourceLocation getLocEnd() const LLVM_READONLY
SourceRange getSourceRange() const LLVM_READONLY
SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...
CXXPseudoDestructorExpr(const ASTContext &Context, Expr *Base, bool isArrow, SourceLocation OperatorLoc, NestedNameSpecifierLoc QualifierLoc, TypeSourceInfo *ScopeType, SourceLocation ColonColonLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage DestroyedType)
bool capturesThis() const
Determine whether this capture handles the C++ this pointer.
An l-value expression is a reference to an object with independent storage.
A trivial tuple used to represent a source range.
NamedDecl - This represents a decl with a name.
NestedNameSpecifier * getQualifier() const
Fetches the nested-name qualifier, if one was given.
QualType getDestroyedType() const
Retrieve the type being destroyed.
bool isTypeOperand() const
CXXRecordDecl * getLambdaClass() const
Retrieve the class that corresponds to the lambda.
QualType getUnqualifiedArrayType(QualType T, Qualifiers &Quals)
Return this type as a completely-unqualified array type, capturing the qualifiers in Quals...
operator "" X (unsigned long long)
bool isIntegerType() const
isIntegerType() does not include complex integers (a GCC extension).
Expr * getCookedLiteral()
If this is not a raw user-defined literal, get the underlying cooked literal (representing the litera...
Expr * IgnoreParens() LLVM_READONLY
IgnoreParens - Ignore parentheses.
bool capturesVariable() const
Determine whether this capture handles a variable.
bool hasInClassInitializer() const
hasInClassInitializer - Determine whether this member has a C++11 in-class initializer.
bool isPointerType() const