26 using namespace clang;
29 typedef llvm::SmallPtrSet<const CXXRecordDecl*, 4>
BaseSet;
36 return !Bases.count(
Base->getCanonicalDecl());
38 return BaseIsNotInSet(Record) && Record->
forallBases(BaseIsNotInSet);
91 assert(!R.
empty() && (*R.
begin())->isCXXClassMember());
96 (!isa<CXXMethodDecl>(DC) || cast<CXXMethodDecl>(DC)->isStatic());
102 bool hasNonInstance =
false;
103 bool isField =
false;
107 D = D->getUnderlyingDecl();
109 if (D->isCXXInstanceMember()) {
110 isField |= isa<FieldDecl>(D) || isa<MSPropertyDecl>(D) ||
111 isa<IndirectFieldDecl>(D);
114 Classes.insert(R->getCanonicalDecl());
116 hasNonInstance =
true;
134 assert(!AbstractInstanceResult);
155 if (isStaticContext) {
159 return AbstractInstanceResult ? AbstractInstanceResult
165 contextClass = MD->
getParent()->getCanonicalDecl();
167 contextClass = cast<CXXRecordDecl>(DC);
175 if (R.getNamingClass() &&
182 Classes.insert(R.getNamingClass()->getCanonicalDecl());
190 AbstractInstanceResult ? AbstractInstanceResult :
213 bool InStaticMethod = Method && Method->
isStatic();
214 bool IsField = isa<FieldDecl>(Rep) || isa<IndirectFieldDecl>(Rep);
216 if (IsField && InStaticMethod)
218 SemaRef.
Diag(Loc, diag::err_invalid_member_use_in_static_method)
219 << Range << nameInfo.
getName();
220 else if (ContextClass && RepClass && SS.
isEmpty() && !InStaticMethod &&
221 !RepClass->
Equals(ContextClass) && RepClass->
Encloses(ContextClass))
224 SemaRef.
Diag(Loc, diag::err_nested_non_static_member_use)
225 << IsField << RepClass << nameInfo.
getName() << ContextClass << Range;
227 SemaRef.
Diag(Loc, diag::err_invalid_non_static_member_use)
228 << nameInfo.
getName() << Range;
230 SemaRef.
Diag(Loc, diag::err_member_call_without_object)
243 return BuildImplicitMemberExpr(SS, TemplateKWLoc, R, TemplateArgs,
true, S);
248 return BuildImplicitMemberExpr(SS, TemplateKWLoc, R, TemplateArgs,
false,
252 Diag(R.
getNameLoc(), diag::warn_cxx98_compat_non_static_member_use)
259 if (TemplateArgs || TemplateKWLoc.
isValid())
260 return BuildTemplateIdExpr(SS, TemplateKWLoc, R,
false, TemplateArgs);
261 return BuildDeclarationNameExpr(SS, R,
false);
270 llvm_unreachable(
"unexpected instance member access kind");
292 return (len >= 1 && len <= 4) || len == 8 || len == 16;
316 bool HalvingSwizzle =
false;
320 bool HexSwizzle = (*compStr ==
's' || *compStr ==
'S') && compStr[1];
322 bool HasRepeated =
false;
323 bool HasIndex[16] = {};
329 if (!strcmp(compStr,
"hi") || !strcmp(compStr,
"lo") ||
330 !strcmp(compStr,
"even") || !strcmp(compStr,
"odd")) {
331 HalvingSwizzle =
true;
332 }
else if (!HexSwizzle &&
334 bool HasRGBA =
IsRGBA(*compStr);
337 if (HasRGBA !=
IsRGBA(*compStr))
339 if (HasIndex[Idx]) HasRepeated =
true;
340 HasIndex[Idx] =
true;
345 if (HasRGBA || (*compStr &&
IsRGBA(*compStr))) {
347 const char *DiagBegin = HasRGBA ? CompName->
getNameStart() : compStr;
348 S.
Diag(OpLoc, diag::ext_opencl_ext_vector_type_rgba_selector)
349 << StringRef(DiagBegin, 1)
354 if (HexSwizzle) compStr++;
356 if (HasIndex[Idx]) HasRepeated =
true;
357 HasIndex[Idx] =
true;
362 if (!HalvingSwizzle && *compStr) {
365 S.
Diag(OpLoc, diag::err_ext_vector_component_name_illegal)
372 if (!HalvingSwizzle) {
380 S.
Diag(OpLoc, diag::err_ext_vector_component_exceeds_length)
390 unsigned SwizzleLength = CompName->
getLength();
396 S.
Diag(OpLoc, diag::err_opencl_ext_vector_component_invalid_length)
407 unsigned CompSize = HalvingSwizzle ? (vecType->
getNumElements() + 1) / 2
420 for (Sema::ExtVectorDeclsType::iterator
424 if ((*I)->getUnderlyingType() == VT)
442 for (
const auto *I : PDecl->
protocols()) {
455 Decl *GDecl =
nullptr;
456 for (
const auto *I : QIdTy->
quals()) {
470 for (
const auto *I : QIdTy->
quals()) {
499 if (PT && (!getLangOpts().ObjC ||
501 assert(BaseExpr &&
"cannot happen with implicit member accesses");
502 Diag(OpLoc, diag::err_typecheck_member_reference_struct_union)
510 isDependentScopeSpecifier(SS));
515 Context, BaseExpr, BaseType, IsArrow, OpLoc,
517 NameInfo, TemplateArgs);
534 SemaRef.
Diag(nameInfo.
getLoc(), diag::err_qualified_member_of_unrelated)
535 << SS.
getRange() << rep << BaseType;
555 cast_or_null<CXXRecordDecl>(computeDeclContext(BaseType));
566 if (!BaseExpr && !(*I)->isCXXInstanceMember())
596 explicit RecordMemberExprValidatorCCC(
const RecordType *RTy)
600 WantTypeSpecifiers =
false;
601 WantExpressionKeywords =
false;
602 WantCXXNamedCasts =
false;
603 WantFunctionLikeCasts =
false;
604 WantRemainingKeywords =
false;
607 bool ValidateCandidate(
const TypoCorrection &candidate)
override {
611 if (!ND || !(isa<ValueDecl>(ND) || isa<FunctionTemplateDecl>(ND)))
615 if (Record->containsDecl(ND))
618 if (
const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Record)) {
620 for (
const auto &BS : RD->bases()) {
622 dyn_cast_or_null<RecordType>(BS.getType().getTypePtrOrNull())) {
623 if (BSTy->getDecl()->containsDecl(ND))
649 diag::err_typecheck_incomplete_tag,
653 if (HasTemplateArgs || TemplateKWLoc.
isValid()) {
674 assert(DC &&
"Cannot handle non-computable dependent contexts in lookup");
676 if (!isa<TypeDecl>(DC)) {
702 llvm::make_unique<RecordMemberExprValidatorCCC>(RTy),
706 "Got a keyword as a correction for a member!");
707 bool DroppedSpecifier =
711 << Typo << DC << DroppedSpecifier
714 SemaRef.
Diag(TypoLoc, diag::err_no_member) << Typo << DC << BaseRange;
718 LookupResult R(Q.SemaRef, Q.NameInfo, Q.LookupKind, Q.Redecl);
727 nullptr, R,
nullptr,
nullptr);
737 Decl *ObjCImpDecl,
bool HasTemplateArgs,
751 (SS.
isSet() && isDependentScopeSpecifier(SS)))
752 return ActOnDependentMemberExpr(Base, BaseType,
754 SS, TemplateKWLoc, FirstQualifierInScope,
755 NameInfo, TemplateArgs);
766 SS, TemplateArgs !=
nullptr, TemplateKWLoc, TE))
777 TemplateArgs !=
nullptr, TemplateKWLoc);
781 Base = BaseResult.
get();
793 return BuildMemberReferenceExpr(Base, BaseType,
794 OpLoc, IsArrow, SS, TemplateKWLoc,
795 FirstQualifierInScope, R, TemplateArgs, S,
804 Expr *baseObjectExpr,
819 assert(!baseObjectExpr &&
"anonymous struct/union is static data member?");
824 = BuildDeclarationNameExpr(EmptySS, baseNameInfo, baseVariable);
827 baseObjectExpr = result.
get();
830 assert((baseVariable || baseObjectExpr) &&
831 "referencing anonymous struct/union without a base variable or " 836 Expr *result = baseObjectExpr;
852 BuildFieldReferenceExpr(result, baseObjectIsPointer,
SourceLocation(),
853 SS, field, foundDecl, memberNameInfo)
863 FieldDecl *field = cast<FieldDecl>(*FI++);
872 (FI == FEnd ? SS : EmptySS), field,
873 fakeFoundDecl, memberNameInfo)
900 assert((!isArrow || Base->
isRValue()) &&
"-> base must be a pointer rvalue");
903 FoundDecl, MemberNameInfo, TemplateArgs, Ty, VK, OK);
932 VarTempl, TemplateKWLoc, MemberNameInfo.
getLoc(), *TemplateArgs);
951 bool SuppressQualifierCheck,
962 if (!IsArrow && BaseExpr && BaseExpr->
isRValue()) {
963 ExprResult Converted = TemporaryMaterializationConversion(BaseExpr);
966 BaseExpr = Converted.
get();
980 const auto *FD = getCurFunctionDecl();
981 if (S && BaseExpr && FD &&
982 (isa<CXXDestructorDecl>(FD) || isa<CXXConstructorDecl>(FD)) &&
985 Diag(MemberLoc, diag::warn_cdtor_function_try_handler_mem_expr)
986 << isa<CXXDestructorDecl>(FD);
991 ? computeDeclContext(SS,
false)
996 if (!IsArrow && BaseExpr) {
999 bool MayBePseudoDestructor =
false;
1000 RetryExpr = ActOnStartCXXMemberReference(getCurScope(), BaseExpr,
1001 OpLoc, tok::arrow, ObjectType,
1002 MayBePseudoDestructor);
1005 RetryExpr = ActOnMemberAccessExpr(
1006 ExtraArgs->
S, RetryExpr.
get(), OpLoc, tok::arrow, TempSS,
1013 Diag(OpLoc, diag::err_no_member_overloaded_arrow)
1032 if ((SS.
isSet() || !BaseExpr ||
1033 (isa<CXXThisExpr>(BaseExpr) &&
1034 cast<CXXThisExpr>(BaseExpr)->isImplicit())) &&
1035 !SuppressQualifierCheck &&
1036 CheckQualifiedMemberReference(BaseExpr, BaseType, SS, R))
1048 BaseExpr, BaseExprType,
1051 TemplateKWLoc, MemberNameInfo,
1077 assert((!TemplateArgs || isa<VarTemplateDecl>(MemberDecl)) &&
1078 "How did we get template arguments here sans a variable template");
1079 if (isa<VarTemplateDecl>(MemberDecl)) {
1081 *
this, cast<VarTemplateDecl>(MemberDecl), TemplateArgs,
1087 FoundDecl, TemplateArgs);
1092 CheckCXXThisCapture(Loc);
1093 BaseExpr =
new (Context)
CXXThisExpr(Loc, BaseExprType,
true);
1097 if (DiagnoseUseOfDecl(MemberDecl, MemberLoc))
1100 if (
FieldDecl *FD = dyn_cast<FieldDecl>(MemberDecl))
1101 return BuildFieldReferenceExpr(BaseExpr, IsArrow, OpLoc, SS, FD, FoundDecl,
1111 return BuildAnonymousStructUnionMemberReference(SS, MemberLoc, FD,
1112 FoundDecl, BaseExpr,
1115 if (
VarDecl *Var = dyn_cast<VarDecl>(MemberDecl)) {
1117 TemplateKWLoc, Var, FoundDecl, MemberNameInfo,
1118 Var->getType().getNonReferenceType(),
VK_LValue,
1122 if (
CXXMethodDecl *MemberFn = dyn_cast<CXXMethodDecl>(MemberDecl)) {
1125 if (MemberFn->isInstance()) {
1130 type = MemberFn->getType();
1134 TemplateKWLoc, MemberFn, FoundDecl, MemberNameInfo,
1137 assert(!isa<FunctionDecl>(MemberDecl) &&
"member function not C++ method?");
1141 TemplateKWLoc, Enum, FoundDecl, MemberNameInfo,
1144 if (
VarTemplateDecl *VarTempl = dyn_cast<VarTemplateDecl>(MemberDecl)) {
1146 *
this, VarTempl, TemplateArgs, MemberNameInfo, TemplateKWLoc))
1148 TemplateKWLoc, Var, FoundDecl, MemberNameInfo,
1149 Var->getType().getNonReferenceType(),
VK_LValue,
1155 if (isa<TypeDecl>(MemberDecl))
1156 Diag(MemberLoc, diag::err_typecheck_member_reference_type)
1157 << MemberName << BaseType << int(IsArrow);
1159 Diag(MemberLoc, diag::err_typecheck_member_reference_unknown)
1160 << MemberName << BaseType << int(IsArrow);
1177 if (!opty)
return false;
1205 return PT->getPointeeType()->isRecordType();
1213 return DefaultFunctionArrayLvalueConversion(Base);
1215 return CheckPlaceholderExpr(Base);
1231 Decl *ObjCImpDecl,
bool HasTemplateArgs,
1233 assert(BaseExpr.
get() &&
"no base expression");
1237 if (BaseExpr.isInvalid())
1240 QualType BaseType = BaseExpr.get()->getType();
1265 S.
Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
1266 << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange()
1273 S.
Diag(MemberLoc, diag::err_typecheck_member_reference_arrow)
1274 << BaseType << BaseExpr.get()->getSourceRange();
1283 HasTemplateArgs, TemplateKWLoc, TE))
1311 (OTy->isObjCId() || OTy->isObjCClass()))
1316 if (OTy->isObjCId() && Member->
isStr(
"isa"))
1321 ObjCImpDecl, HasTemplateArgs, TemplateKWLoc);
1326 diag::err_typecheck_incomplete_tag,
1335 auto Validator = llvm::make_unique<DeclFilterCCC<ObjCIvarDecl>>();
1336 Validator->IsObjCIvarLookup = IsArrow;
1343 S.
PDiag(diag::err_typecheck_member_reference_ivar_suggest)
1347 assert(!ClassDeclared);
1350 if (
auto *
Category = dyn_cast<ObjCCategoryDecl>(D))
1353 if (
auto *Implementation = dyn_cast<ObjCImplementationDecl>(D))
1354 ClassDeclared = Implementation->getClassInterface();
1355 else if (
auto *Interface = dyn_cast<ObjCInterfaceDecl>(D))
1356 ClassDeclared = Interface;
1358 assert(ClassDeclared &&
"cannot query interface");
1363 S.
Diag(MemberLoc, diag::err_property_found_suggest)
1364 << Member << BaseExpr.get()->getType()
1369 S.
Diag(MemberLoc, diag::err_typecheck_member_reference_ivar)
1371 << BaseExpr.get()->getSourceRange();
1376 assert(ClassDeclared);
1391 ClassOfMethodDecl = MD->getClassInterface();
1400 dyn_cast<ObjCImplementationDecl>(ObjCImpDecl))
1401 ClassOfMethodDecl = IMPD->getClassInterface();
1403 dyn_cast<ObjCCategoryImplDecl>(ObjCImpDecl))
1404 ClassOfMethodDecl = CatImplClass->getClassInterface();
1410 S.
Diag(MemberLoc, diag::err_private_ivar_access)
1414 S.
Diag(MemberLoc, diag::err_protected_ivar_access)
1422 if (UO->getOpcode() == UO_Deref)
1425 if (
DeclRefExpr *DE = dyn_cast<DeclRefExpr>(BaseExp))
1427 S.
Diag(DE->getLocation(), diag::err_arc_weak_ivar_access);
1439 S.
Diag(MemberLoc, diag::warn_direct_ivar_access) << IV->
getDeclName();
1443 IV, IV->
getUsageType(BaseType), MemberLoc, OpLoc, BaseExpr.get(),
1448 !S.
Diags.
isIgnored(diag::warn_arc_repeated_use_of_weak, MemberLoc))
1466 if (BaseExpr.isInvalid())
1470 BaseExpr.get()->getType()));
1501 SMD = dyn_cast<ObjCMethodDecl>(SDecl);
1512 ObjCImpDecl, HasTemplateArgs, TemplateKWLoc);
1514 return ExprError(S.
Diag(MemberLoc, diag::err_property_not_found)
1515 << MemberName << BaseType);
1525 ObjCImpDecl, HasTemplateArgs, TemplateKWLoc);
1559 if (Getter || Setter) {
1567 ObjCImpDecl, HasTemplateArgs, TemplateKWLoc);
1569 return ExprError(S.
Diag(MemberLoc, diag::err_property_not_found)
1570 << MemberName << BaseType);
1588 VK = POE->getSyntacticForm()->getValueKind();
1590 VK = BaseExpr.get()->getValueKind();
1612 ObjCImpDecl, HasTemplateArgs, TemplateKWLoc);
1626 if (!IsArrow && Ptr->getPointeeType()->isRecordType() &&
1628 S.
Diag(OpLoc, diag::err_typecheck_member_reference_suggestion)
1629 << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange()
1635 ObjCImpDecl, HasTemplateArgs, TemplateKWLoc);
1642 BaseExpr, S.
PDiag(diag::err_member_reference_needs_call),
1645 if (BaseExpr.isInvalid())
1649 ObjCImpDecl, HasTemplateArgs, TemplateKWLoc);
1652 S.
Diag(OpLoc, diag::err_typecheck_member_reference_struct_union)
1653 << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;
1674 Decl *ObjCImpDecl) {
1679 if (getLangOpts().MicrosoftExt &&
1682 diag::ext_ms_explicit_constructor_call);
1689 DecomposeUnqualifiedId(Id, TemplateArgsBuffer,
1690 NameInfo, TemplateArgs);
1693 bool IsArrow = (OpKind == tok::arrow);
1696 = (!SS.
isSet() ? nullptr : FindFirstQualifierInScope(S, SS.
getScopeRep()));
1699 ExprResult Result = MaybeConvertParenListExprToParenExpr(S, Base);
1701 Base = Result.
get();
1704 isDependentScopeSpecifier(SS)) {
1705 return ActOnDependentMemberExpr(Base, Base->
getType(), IsArrow, OpLoc, SS,
1706 TemplateKWLoc, FirstQualifierInScope,
1707 NameInfo, TemplateArgs);
1712 Base, Base->
getType(), OpLoc, IsArrow, SS, TemplateKWLoc,
1713 FirstQualifierInScope, NameInfo, TemplateArgs, S, &ExtraArgs);
1716 CheckMemberAccessOfNoDeref(cast<MemberExpr>(Res.
get()));
1721 void Sema::CheckMemberAccessOfNoDeref(
const MemberExpr *E) {
1726 if (isa<ArrayType>(ResultTy))
1730 if (
const auto *Ptr = dyn_cast<PointerType>(
1732 if (Ptr->getPointeeType()->hasAttr(attr::NoDeref))
1733 ExprEvalContexts.back().PossibleDerefs.insert(E);
1781 Qualifiers Combined = BaseQuals + MemberQuals;
1782 if (Combined != MemberQuals)
1787 if (!(CurMethod && CurMethod->isDefaulted()))
1788 UnusedPrivateFields.remove(Field);
1797 if (getLangOpts().OpenMP && IsArrow &&
1798 !CurContext->isDependentContext() &&
1799 isa<CXXThisExpr>(Base.
get()->IgnoreParenImpCasts())) {
1800 if (
auto *PrivateCopy = isOpenMPCapturedDecl(Field)) {
1801 return getOpenMPCapturedExpr(PrivateCopy, VK, OK,
1802 MemberNameInfo.
getLoc());
1808 MemberNameInfo, MemberType, VK, OK);
1820 bool IsKnownInstance,
const Scope *S) {
1828 QualType ThisTy = getCurrentThisType();
1829 assert(!ThisTy.
isNull() &&
"didn't correctly pre-flight capture of 'this'");
1831 Expr *baseExpr =
nullptr;
1832 if (IsKnownInstance) {
1836 CheckCXXThisCapture(Loc);
1837 baseExpr =
new (Context)
CXXThisExpr(loc, ThisTy,
true);
1840 return BuildMemberReferenceExpr(baseExpr, ThisTy,
1845 R, TemplateArgs, S);
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
SourceLocation getLoc() const
getLoc - Returns the main location of the declaration name.
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
This is the scope of a C++ try statement.
static const Decl * getCanonicalDecl(const Decl *D)
static DiagnosticBuilder Diag(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID)
Produce a diagnostic highlighting some portion of a literal.
ExtVectorDeclsType ExtVectorDecls
ExtVectorDecls - This is a list all the extended vector types.
ExternalSemaSource * getExternalSource() const
Smart pointer class that efficiently represents Objective-C method names.
SelectorTable & getSelectorTable()
PointerType - C99 6.7.5.1 - Pointer Declarators.
QualType getPointeeType() const
A (possibly-)qualified type.
Simple class containing the result of Sema::CorrectTypo.
ObjCInterfaceDecl * getClassInterface()
bool IvarBacksCurrentMethodAccessor(ObjCInterfaceDecl *IFace, ObjCMethodDecl *Method, ObjCIvarDecl *IV)
IvarBacksCurrentMethodAccessor - This routine returns 'true' if 'IV' is an ivar synthesized for 'Meth...
The reference may be to an instance member, but it might be invalid if so, because the context is not...
SourceRange getSourceRange() const LLVM_READONLY
Return the source range that covers this unqualified-id.
static MemberExpr * BuildMemberExpr(Sema &SemaRef, ASTContext &C, Expr *Base, bool isArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, ValueDecl *Member, DeclAccessPair FoundDecl, const DeclarationNameInfo &MemberNameInfo, QualType Ty, ExprValueKind VK, ExprObjectKind OK, const TemplateArgumentListInfo *TemplateArgs=nullptr)
Build a MemberExpr AST node.
DeclContext * getFunctionLevelDeclContext()
static void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo)
Diagnose a reference to a field with no object available.
QualType getDesugaredType(const ASTContext &Context) const
Return the specified type with any "sugar" removed from the type.
VarDecl * getVarDecl() const
void setLookupName(DeclarationName Name)
Sets the name to look up.
QualType CXXThisTypeOverride
When non-NULL, the C++ 'this' expression is allowed despite the current context not being a non-stati...
QualType getPointeeType() const
If this is a pointer, ObjC object pointer, or block pointer, this returns the respective pointee...
An instance of this object exists for each enum constant that is defined.
static UnresolvedMemberExpr * Create(const ASTContext &Context, bool HasUnresolvedUsing, Expr *Base, QualType BaseType, bool IsArrow, SourceLocation OperatorLoc, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, const DeclarationNameInfo &MemberNameInfo, const TemplateArgumentListInfo *TemplateArgs, UnresolvedSetIterator Begin, UnresolvedSetIterator End)
bool isRecordType() const
bool isEmpty() const
No scope specifier.
QualType getQualifiedType(SplitQualType split) const
Un-split a SplitQualType.
SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID)
Emit a diagnostic.
Decl - This represents one declaration (or definition), e.g.
bool isExtVectorType() const
Defines the C++ template declaration subclasses.
The reference is definitely an implicit instance member access.
SourceLocation getBeginLoc() const
getBeginLoc - Retrieve the location of the first token.
Declaration of a variable template.
RedeclarationKind
Specifies whether (or how) name lookup is being performed for a redeclaration (vs.
static bool IsInFnTryBlockHandler(const Scope *S)
Determine if the given scope is within a function-try-block handler.
LLVM_ATTRIBUTE_REINITIALIZES void clear()
Clears out any current state.
const DeclAccessPair & getPair() const
This file provides some common utility functions for processing Lambda related AST Constructs...
Represents a variable declaration or definition.
PartialDiagnostic PDiag(unsigned DiagID=0)
Build a partial diagnostic.
DeclarationName getLookupName() const
Gets the name to look up.
ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.
DiagnosticsEngine & Diags
const T * getAs() const
Member-template getAs<specific type>'.
DeclContext * computeDeclContext(QualType T)
Compute the DeclContext that is associated with the given type.
ObjCMethodDecl - Represents an instance or class method declaration.
NamedDecl * getUnderlyingDecl()
Looks through UsingDecls and ObjCCompatibleAliasDecls for the underlying named decl.
bool isInvalidDecl() const
QualType getObjCClassType() const
Represents the Objective-C Class type.
void setBegin(SourceLocation b)
protocol_range protocols() const
Defines the clang::Expr interface and subclasses for C++ expressions.
iterator begin(Source *source, bool LocalOnly=false)
The collection of all-type qualifiers we support.
Qualifiers getQualifiers() const
Retrieve all qualifiers.
Expr * IgnoreImpCasts() LLVM_READONLY
IgnoreImpCasts - Skip past any implicit casts which might surround this expression.
Represents a struct/union/class.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
bool Encloses(const DeclContext *DC) const
Determine whether this declaration context encloses the declaration context DC.
One of these records is kept for each identifier that is lexed.
bool LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, SourceLocation TemplateKWLoc=SourceLocation())
bool isStr(const char(&Str)[StrLen]) const
Return true if this is the identifier for the specified string.
Represents a class type in Objective C.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
DeclarationName getCorrection() const
Gets the DeclarationName of the typo correction.
bool CheckQualifiedMemberReference(Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, const LookupResult &R)
static VarDecl * getVarTemplateSpecialization(Sema &S, VarTemplateDecl *VarTempl, const TemplateArgumentListInfo *TemplateArgs, const DeclarationNameInfo &MemberNameInfo, SourceLocation TemplateKWLoc)
ObjCMethodFamily
A family of Objective-C methods.
Base class for callback objects used by Sema::CorrectTypo to check the validity of a potential typo c...
Represents a member of a struct/union/class.
The current expression is potentially evaluated at run time, which means that code may be generated t...
The reference may be to an unresolved using declaration and the context is not an instance method...
const DeclarationNameInfo & getLookupNameInfo() const
Gets the name info to look up.
The iterator over UnresolvedSets.
static bool ShouldTryAgainWithRedefinitionType(Sema &S, ExprResult &base)
Given that normal member access failed on the given expression, and given that the expression's type ...
bool isSpecificBuiltinType(unsigned K) const
Test for a particular builtin type.
bool Equals(const DeclContext *DC) const
Determine whether this declaration context is equivalent to the declaration context DC...
Represents a C++ member access expression for which lookup produced a set of overloaded functions...
static int getPointAccessorIdx(char c)
bool isObjCSelType() const
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
ExprResult DefaultFunctionArrayConversion(Expr *E, bool Diagnose=true)
DefaultFunctionArrayConversion (C99 6.3.2.1p3, C99 6.3.2.1p4).
An r-value expression (a pr-value in the C++11 taxonomy) produces a temporary value.
bool isDependentName() const
Determines whether the name itself is dependent, e.g., because it involves a C++ type that is itself ...
static Selector constructSetterSelector(IdentifierTable &Idents, SelectorTable &SelTable, const IdentifierInfo *Name)
Return the default setter selector for the given identifier.
Represents a C++ unqualified-id that has been parsed.
bool isBitField() const
Determines whether this field is a bitfield.
Selector getNullarySelector(IdentifierInfo *ID)
void resolveKind()
Resolves the result kind of the lookup, possibly hiding decls.
Represents the results of name lookup.
static DeclAccessPair make(NamedDecl *D, AccessSpecifier AS)
ObjCMethodDecl * getCurMethodDecl()
getCurMethodDecl - If inside of a method body, this returns a pointer to the method decl for the meth...
A convenient class for passing around template argument information.
static IMAKind ClassifyImplicitMemberAccess(Sema &SemaRef, const LookupResult &R)
The given lookup names class member(s) and is not being used for an address-of-member expression...
bool hasAddressSpace() const
ExprValueKind getValueKind() const
getValueKind - The value kind that this expression produces.
ExprResult BuildAnonymousStructUnionMemberReference(const CXXScopeSpec &SS, SourceLocation nameLoc, IndirectFieldDecl *indirectField, DeclAccessPair FoundDecl=DeclAccessPair::make(nullptr, AS_none), Expr *baseObjectExpr=nullptr, SourceLocation opLoc=SourceLocation())
static bool isRecordType(QualType T)
TemplateSpecializationKind getTemplateSpecializationKind() const
If this variable is an instantiation of a variable template or a static data member of a class templa...
The reference is a contextually-permitted abstract member reference.
CanQualType PseudoObjectTy
QualType getObjCClassRedefinitionType() const
Retrieve the type that Class has been defined to, which may be different from the built-in Class if C...
Expr * IgnoreParenCasts() LLVM_READONLY
IgnoreParenCasts - Ignore parentheses and casts.
Scope - A scope is a transient data structure that is used while parsing the program.
CXXRecordDecl * getCanonicalDecl() override
Retrieves the "canonical" declaration of the given declaration.
bool declaresSameEntity(const Decl *D1, const Decl *D2)
Determine whether two declarations declare the same entity.
TypoExpr - Internal placeholder for expressions where typo correction still needs to be performed and...
ObjCMethodDecl * lookupClassMethod(Selector Sel) const
Lookup a class method for a given selector.
ExprResult ActOnDependentMemberExpr(Expr *Base, QualType BaseType, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs)
Represents a C++ nested-name-specifier or a global scope specifier.
The current expression occurs within a discarded statement.
Represents an Objective-C protocol declaration.
const LangOptions & getLangOpts() const
The reference may be an implicit instance member access.
An ordinary object is located at an address in memory.
bool isUnevaluatedContext() const
Determines whether we are currently in a context that is not evaluated as per C++ [expr] p5...
Represents an ObjC class declaration.
ExprResult BuildMemberReferenceExpr(Expr *Base, QualType BaseType, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, ActOnMemberAccessExtraArgs *ExtraArgs=nullptr)
void addDecl(NamedDecl *D)
Add a declaration to these results with its natural access.
Member name lookup, which finds the names of class/struct/union members.
ObjCInterfaceDecl * getInterface() const
Gets the interface declaration for this object type, if the base type really is an interface...
The current context is "potentially evaluated" in C++11 terms, but the expression is evaluated at com...
NestedNameSpecifierLoc getWithLocInContext(ASTContext &Context) const
Retrieve a nested-name-specifier with location information, copied into the given AST context...
unsigned getLength() const
Efficiently return the length of this identifier info.
Sema::RedeclarationKind redeclarationKind() const
Represents the this expression in C++.
llvm::SmallPtrSet< const CXXRecordDecl *, 4 > BaseSet
RAII class used to determine whether SFINAE has trapped any errors that occur during template argumen...
unsigned getFlags() const
getFlags - Return the flags for this scope.
Sema - This implements semantic analysis and AST building for C.
All possible referrents are instance members and the current context is not an instance method...
void recordUseOfWeak(const ExprT *E, bool IsRead=true)
Record that a weak object was accessed.
SourceRange getRange() const
QualType getUsageType(QualType objectType) const
Retrieve the type of this instance variable when viewed as a member of a specific object type...
std::string getAsString(const LangOptions &LO) const
An Objective-C property is a logical field of an Objective-C object which is read and written via Obj...
static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE)
The current expression is potentially evaluated, but any declarations referenced inside that expressi...
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
This represents one expression.
DeclResult CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation TemplateNameLoc, const TemplateArgumentListInfo &TemplateArgs)
LookupNameKind
Describes the kind of name lookup to perform.
ExprValueKind
The categorization of expression values, currently following the C++11 scheme.
static bool IsRGBA(char c)
Determine whether input char is from rgba component set.
const T * castAs() const
Member-template castAs<specific type>.
std::string getAsString() const
Retrieve the human-readable string for this name.
Defines the clang::Preprocessor interface.
All possible referrents are instance members of an unrelated class.
DeclContext * getDeclContext()
static CXXDependentScopeMemberExpr * Create(const ASTContext &Ctx, Expr *Base, QualType BaseType, bool IsArrow, SourceLocation OperatorLoc, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierFoundInScope, DeclarationNameInfo MemberNameInfo, const TemplateArgumentListInfo *TemplateArgs)
Represents a C++ template name within the type system.
bool RequireCompleteType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser)
Ensure that the type T is a complete type.
UnqualifiedIdKind getKind() const
Determine what kind of name we have.
The current expression and its subexpressions occur within an unevaluated operand (C++11 [expr]p7)...
ObjCIvarDecl * lookupInstanceVariable(IdentifierInfo *IVarName, ObjCInterfaceDecl *&ClassDeclared)
bool isSingleResult() const
Determines if this names a single result which is not an unresolved value using decl.
DeclContext * getParent()
getParent - Returns the containing DeclContext.
SourceLocation getEnd() const
UnaryOperator - This represents the unary-expression's (except sizeof and alignof), the postinc/postdec operators from postfix-expression, and various extensions.
static void DiagnoseQualifiedMemberReference(Sema &SemaRef, Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, NamedDecl *rep, const DeclarationNameInfo &nameInfo)
We know that the given qualified member reference points only to declarations which do not belong to ...
ExprResult BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S)
Builds an expression which might be an implicit member expression.
A member reference to an MSPropertyDecl.
This template specialization was implicitly instantiated from a template.
bool isNull() const
Return true if this QualType doesn't point to a type yet.
bool isProvablyNotDerivedFrom(const CXXRecordDecl *Base) const
Determine whether this class is provably not derived from the type Base.
ExprObjectKind getObjectKind() const
getObjectKind - The object kind that this expression produces.
bool isUnresolvableResult() const
RecordDecl * getDecl() const
NestedNameSpecifier * getScopeRep() const
Retrieve the representation of the nested-name-specifier.
chain_iterator chain_end() const
QualType getObjCIdRedefinitionType() const
Retrieve the type that id has been defined to, which may be different from the built-in id if id has ...
static bool isPointerToRecordType(QualType T)
ArrayRef< NamedDecl * >::const_iterator chain_iterator
ActionResult - This structure is used while parsing/acting on expressions, stmts, etc...
PseudoObjectExpr - An expression which accesses a pseudo-object l-value.
static ExprResult BuildMSPropertyRefExpr(Sema &S, Expr *BaseExpr, bool IsArrow, const CXXScopeSpec &SS, MSPropertyDecl *PD, const DeclarationNameInfo &NameInfo)
bool isAccessorWithinNumElements(char c, bool isNumericAccessor) const
Encodes a location in the source.
QualType getObjCSelRedefinitionType() const
Retrieve the type that 'SEL' has been defined to, which may be different from the built-in 'SEL' if '...
DeclarationName getName() const
getName - Returns the embedded declaration name.
QualType getElementType() const
IdentifierTable & getIdentifierTable()
bool isOverloadedResult() const
Determines if the results are overloaded.
ExprObjectKind
A further classification of the kind of object referenced by an l-value or x-value.
Represents a static or instance method of a struct/union/class.
QualType getExtVectorType(QualType VectorType, unsigned NumElts) const
Return the unique reference to an extended vector type of the specified element type and size...
ExprResult DefaultLvalueConversion(Expr *E)
The reference may be to an unresolved using declaration.
const char * getNameStart() const
Return the beginning of the actual null-terminated string for this identifier.
TokenKind
Provides a simple uniform namespace for tokens from all C languages.
bool forallBases(ForallBasesCallback BaseMatches, bool AllowShortCircuit=true) const
Determines if the given callback holds for all the direct or indirect base classes of this type...
Represents one property declaration in an Objective-C interface.
bool DiagnoseUseOfDecl(NamedDecl *D, ArrayRef< SourceLocation > Locs, const ObjCInterfaceDecl *UnknownObjCClass=nullptr, bool ObjCPropertyAccess=false, bool AvoidPartialAvailabilityChecks=false, ObjCInterfaceDecl *ClassReciever=nullptr)
Determine whether the use of this declaration is valid, and emit any corresponding diagnostics...
static Decl * FindGetterSetterNameDecl(const ObjCObjectPointerType *QIdTy, IdentifierInfo *Member, const Selector &Sel, ASTContext &Context)
bool isSuperClassOf(const ObjCInterfaceDecl *I) const
isSuperClassOf - Return true if this class is the specified class or is a super class of the specifie...
bool isThisOutsideMemberFunctionBody(QualType BaseType)
Determine whether the given type is the type of *this that is used outside of the body of a member fu...
bool RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC)
Require that the context specified by SS be complete.
bool isInvalid() const
An error occurred during parsing of the scope specifier.
bool hasSameUnqualifiedType(QualType T1, QualType T2) const
Determine whether the given types are equivalent after cvr-qualifiers have been removed.
static MemberExpr * Create(const ASTContext &C, Expr *base, bool isarrow, SourceLocation OperatorLoc, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, ValueDecl *memberdecl, DeclAccessPair founddecl, DeclarationNameInfo MemberNameInfo, const TemplateArgumentListInfo *targs, QualType ty, ExprValueKind VK, ExprObjectKind OK)
Sema & getSema() const
Get the Sema object that this lookup result is searching with.
A POD class for pairing a NamedDecl* with an access specifier.
void setTemplateSpecializationKind(TemplateSpecializationKind TSK, SourceLocation PointOfInstantiation=SourceLocation())
For a static data member that was instantiated from a static data member of a class template...
void diagnoseTypo(const TypoCorrection &Correction, const PartialDiagnostic &TypoDiag, bool ErrorRecovery=true)
QualType getTypedefType(const TypedefNameDecl *Decl, QualType Canon=QualType()) const
Return the unique reference to the type for the specified typedef-name decl.
void MarkMemberReferenced(MemberExpr *E)
Perform reference-marking and odr-use handling for a MemberExpr.
Dataflow Directional Tag Classes.
bool isValid() const
Return true if this is a valid SourceLocation object.
ObjCMethodDecl * lookupPrivateMethod(const Selector &Sel, bool Instance=true) const
Lookup a method in the classes implementation hierarchy.
ObjCPropertyDecl * FindPropertyDeclaration(const IdentifierInfo *PropertyId, ObjCPropertyQueryKind QueryKind) const
FindPropertyDeclaration - Finds declaration of the property given its name in 'PropertyId' and return...
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
const Scope * getParent() const
getParent - Return the scope that this is nested in.
ExprResult ImpCastExprToType(Expr *E, QualType Type, CastKind CK, ExprValueKind VK=VK_RValue, const CXXCastPath *BasePath=nullptr, CheckedConversionKind CCK=CCK_ImplicitConversion)
ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast.
The current expression occurs within an unevaluated operand that unconditionally permits abstract ref...
Represents a field injected from an anonymous union/struct into the parent scope. ...
static FixItHint CreateRemoval(CharSourceRange RemoveRange)
Create a code modification hint that removes the given source range.
AccessSpecifier getAccess() const
static ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc)
Look up the given member of the given non-type-dependent expression.
NamedDecl * getCorrectionDecl() const
Gets the pointer to the declaration of the typo correction.
The name of a declaration.
NamedDecl * getFoundDecl() const
Fetch the unique decl found by this lookup.
const CXXRecordDecl * getParent() const
Returns the parent of this method declaration, which is the class in which this method is defined...
bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD, bool ForceComplain=false, bool(*IsPlausibleResult)(QualType)=nullptr)
Try to recover by turning the given expression into a call.
const ObjCObjectType * getObjectType() const
Gets the type pointed to by this ObjC pointer.
ExprResult ActOnMemberAccessExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, UnqualifiedId &Member, Decl *ObjCImpDecl)
The main callback when the parser finds something like expression .
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspnd...
Expr * IgnoreParenImpCasts() LLVM_READONLY
IgnoreParenImpCasts - Ignore parentheses and implicit casts.
ExprResult BuildImplicitMemberExpr(const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, bool IsDefiniteInstance, const Scope *S)
Builds an implicit member access expression.
Represents a pointer to an Objective C object.
ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...
A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...
This is the scope for a function-level C++ try or catch scope.
SourceRange getSourceRange() const LLVM_READONLY
getSourceRange - The range of the declaration name.
chain_iterator chain_begin() const
FunctionDecl * getCurFunctionDecl()
getCurFunctionDecl - If inside of a function body, this returns a pointer to the function decl for th...
bool isFunctionType() const
ExprResult HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super)
HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an objective C interface...
ExtVectorType - Extended vector type.
Base for LValueReferenceType and RValueReferenceType.
CanQualType BoundMemberTy
SmallVector< ExpressionEvaluationContextRecord, 8 > ExprEvalContexts
A stack of expression evaluation contexts.
ExprResult BuildFieldReferenceExpr(Expr *BaseExpr, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, FieldDecl *Field, DeclAccessPair FoundDecl, const DeclarationNameInfo &MemberNameInfo)
Sema::LookupNameKind getLookupKind() const
Gets the kind of lookup to perform.
A bitfield object is a bitfield on a C or C++ record.
ObjCIvarRefExpr - A reference to an ObjC instance variable.
bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx, bool InUnqualifiedLookup=false)
Perform qualified name lookup into a given context.
CanQualType getCanonicalType(QualType T) const
Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...
bool isSet() const
Deprecated.
The reference may be to an instance member, but it is invalid if so, because the context is from an u...
ExprResult PerformMemberExprBaseConversion(Expr *Base, bool IsArrow)
Perform conversions on the LHS of a member access expression.
Reading or writing from this object requires a barrier call.
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.
ActionResult< Expr * > ExprResult
bool isMutable() const
Determines whether this field is mutable (C++ only).
Represents a C++ struct/union/class.
sema::FunctionScopeInfo * getCurFunction() const
Qualifiers getQualifiers() const
Retrieve the set of qualifiers applied to this type.
ObjCIvarDecl - Represents an ObjC instance variable.
static bool IsValidOpenCLComponentSwizzleLength(unsigned len)
TypoExpr * CorrectTypoDelayed(const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind, Scope *S, CXXScopeSpec *SS, std::unique_ptr< CorrectionCandidateCallback > CCC, TypoDiagnosticGenerator TDG, TypoRecoveryCallback TRC, CorrectTypoKind Mode, DeclContext *MemberContext=nullptr, bool EnteringContext=false, const ObjCObjectPointerType *OPT=nullptr)
Try to "correct" a typo in the source code by finding visible declarations whose names are similar to...
static FixItHint CreateReplacement(CharSourceRange RemoveRange, StringRef Code)
Create a code modification hint that replaces the given source range with the given code string...
SourceRange getSourceRange() const LLVM_READONLY
SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...
unsigned getNumElements() const
bool isDependentType() const
Whether this type is a dependent type, meaning that its definition somehow depends on a template para...
A reference to a declared variable, function, enum, etc.
const Scope * getFnParent() const
getFnParent - Return the closest scope that is a function body.
bool isIgnored(unsigned DiagID, SourceLocation Loc) const
Determine whether the diagnostic is known to be ignored.
bool isPointerType() const
void setBaseObjectType(QualType T)
Sets the base object type for this lookup.
The reference is definitely not an instance member access.
void suppressDiagnostics()
Suppress the diagnostics that would normally fire because of this lookup.
An instance of this class represents the declaration of a property member.
void diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc)
An l-value expression is a reference to an object with independent storage.
bool empty() const
Return true if no decls were found.
static Decl * FindGetterSetterNameDeclFromProtocolList(const ObjCProtocolDecl *PDecl, IdentifierInfo *Member, const Selector &Sel, ASTContext &Context)
static int getNumericAccessorIdx(char c)
A trivial tuple used to represent a source range.
TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind, Scope *S, CXXScopeSpec *SS, std::unique_ptr< CorrectionCandidateCallback > CCC, CorrectTypoKind Mode, DeclContext *MemberContext=nullptr, bool EnteringContext=false, const ObjCObjectPointerType *OPT=nullptr, bool RecordFailure=true)
Try to "correct" a typo in the source code by finding visible declarations whose names are similar to...
This represents a decl that may have a name.
ObjCMethodDecl * getInstanceMethod(Selector Sel, bool AllowHidden=false) const
AccessControl getAccessControl() const
SourceLocation getNameLoc() const
Gets the location of the identifier.
static QualType CheckExtVectorComponent(Sema &S, QualType baseType, ExprValueKind &VK, SourceLocation OpLoc, const IdentifierInfo *CompName, SourceLocation CompLoc)
Check an ext-vector component access expression.
NamedDecl * getRepresentativeDecl() const
Fetches a representative decl. Useful for lazy diagnostics.
SourceLocation getBegin() const
void WillReplaceSpecifier(bool ForceReplacement)
ObjCCategoryImplDecl - An object of this class encapsulates a category @implementation declaration...
The current expression occurs within a braced-init-list within an unevaluated operand.
SourceLocation getLocation() const
static bool isProvablyNotDerivedFrom(Sema &SemaRef, CXXRecordDecl *Record, const BaseSet &Bases)
Determines if the given class is provably not derived from all of the prospective base classes...
bool isCXXInstanceMember() const
Determine whether the given declaration is an instance member of a C++ class.
bool hasErrorOccurred() const
Determine whether any SFINAE errors have been trapped.
Qualifiers::ObjCLifetime getObjCLifetime() const
Returns lifetime attribute of this type.
bool isTransparentContext() const
isTransparentContext - Determines whether this context is a "transparent" context, meaning that the members declared in this context are semantically declared in the nearest enclosing non-transparent (opaque) context but are lexically declared in this context.