clang API Documentation
#include "clang/Sema/Overload.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/AST/ASTLambda.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/ScopeInfo.h"
Go to the source code of this file.
typedef llvm::SmallPtrSet<const CXXRecordDecl*, 4> BaseSet |
Definition at line 29 of file SemaExprMember.cpp.
enum IMAKind |
Definition at line 44 of file SemaExprMember.cpp.
static bool BaseIsNotInSet | ( | const CXXRecordDecl * | Base, |
void * | BasesPtr | ||
) | [static] |
Definition at line 30 of file SemaExprMember.cpp.
References clang::CXXRecordDecl::getCanonicalDecl().
Referenced by isProvablyNotDerivedFrom().
static ExprResult BuildFieldReferenceExpr | ( | Sema & | S, |
Expr * | BaseExpr, | ||
bool | IsArrow, | ||
const CXXScopeSpec & | SS, | ||
FieldDecl * | Field, | ||
DeclAccessPair | FoundDecl, | ||
const DeclarationNameInfo & | MemberNameInfo | ||
) | [static] |
Definition at line 1662 of file SemaExprMember.cpp.
References BuildMemberExpr(), clang::Sema::Context, clang::ExprError(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), clang::ASTContext::getCanonicalType(), clang::Expr::getObjectKind(), clang::Type::getPointeeType(), clang::ASTContext::getQualifiedType(), clang::CanQual< T >::getQualifiers(), clang::QualType::getQualifiers(), clang::CXXScopeSpec::getScopeRep(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::Expr::getValueKind(), clang::Qualifiers::hasAddressSpace(), clang::FieldDecl::isBitField(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::FieldDecl::isMutable(), clang::OK_BitField, clang::OK_Ordinary, clang::Sema::PerformObjectMemberConversion(), clang::Qualifiers::removeConst(), clang::Qualifiers::removeObjCGCAttr(), clang::Sema::UnusedPrivateFields, clang::VK_LValue, and clang::VK_RValue.
Referenced by clang::Sema::BuildAnonymousStructUnionMemberReference(), and clang::Sema::BuildMemberReferenceExpr().
static MemberExpr* BuildMemberExpr | ( | Sema & | SemaRef, |
ASTContext & | C, | ||
Expr * | Base, | ||
bool | isArrow, | ||
const CXXScopeSpec & | SS, | ||
SourceLocation | TemplateKWLoc, | ||
ValueDecl * | Member, | ||
DeclAccessPair | FoundDecl, | ||
const DeclarationNameInfo & | MemberNameInfo, | ||
QualType | Ty, | ||
ExprValueKind | VK, | ||
ExprObjectKind | OK, | ||
const TemplateArgumentListInfo * | TemplateArgs = nullptr |
||
) | [static] |
Build a MemberExpr AST node.
Definition at line 865 of file SemaExprMember.cpp.
References clang::MemberExpr::Create(), clang::CXXScopeSpec::getWithLocInContext(), clang::Expr::isRValue(), and clang::Sema::MarkMemberReferenced().
Referenced by BuildFieldReferenceExpr(), and clang::Sema::BuildMemberReferenceExpr().
static ExprResult BuildMSPropertyRefExpr | ( | Sema & | S, |
Expr * | BaseExpr, | ||
bool | IsArrow, | ||
const CXXScopeSpec & | SS, | ||
MSPropertyDecl * | PD, | ||
const DeclarationNameInfo & | NameInfo | ||
) | [static] |
Definition at line 851 of file SemaExprMember.cpp.
References clang::Sema::Context, clang::DeclarationNameInfo::getLoc(), clang::CXXScopeSpec::getWithLocInContext(), clang::ASTContext::PseudoObjectTy, and clang::VK_LValue.
Referenced by clang::Sema::BuildMemberReferenceExpr().
static QualType CheckExtVectorComponent | ( | Sema & | S, |
QualType | baseType, | ||
ExprValueKind & | VK, | ||
SourceLocation | OpLoc, | ||
const IdentifierInfo * | CompName, | ||
SourceLocation | CompLoc | ||
) | [static] |
Check an ext-vector component access expression.
VK should be set in advance to the value kind of the base expression.
Definition at line 276 of file SemaExprMember.cpp.
References clang::LazyVector< T, Source, Loader, LoadedStorage, LocalStorage >::begin(), clang::Sema::Context, clang::Sema::Diag(), clang::LazyVector< T, Source, Loader, LoadedStorage, LocalStorage >::end(), clang::Sema::ExtVectorDecls, clang::Type::getAs(), clang::VectorType::getElementType(), clang::Sema::getExternalSource(), clang::ASTContext::getExtVectorType(), clang::IdentifierInfo::getLength(), clang::IdentifierInfo::getNameStart(), clang::VectorType::getNumElements(), clang::ExtVectorType::getNumericAccessorIdx(), clang::ExtVectorType::getPointAccessorIdx(), clang::ASTContext::getTypedefType(), clang::ExtVectorType::isAccessorWithinNumElements(), clang::LazyVector< TypedefNameDecl *, ExternalSemaSource,&ExternalSemaSource::ReadExtVectorDecls, 2, 2 >::iterator, and clang::VK_RValue.
Referenced by LookupMemberExpr().
static IMAKind ClassifyImplicitMemberAccess | ( | Sema & | SemaRef, |
Scope * | CurScope, | ||
const LookupResult & | R | ||
) | [static] |
The given lookup names class member(s) and is not being used for an address-of-member expression. Classify the type of access according to whether it's possible that this reference names an instance member. This is best-effort in dependent contexts; it is okay to conservatively answer "yes", in which case some errors will simply not be caught until template-instantiation.
Definition at line 92 of file SemaExprMember.cpp.
References clang::LookupResult::begin(), clang::Sema::ConstantEvaluated, clang::Sema::CXXThisTypeOverride, clang::LookupResult::empty(), clang::LookupResult::end(), clang::Sema::ExprEvalContexts, clang::CXXRecordDecl::getCanonicalDecl(), clang::Decl::getDeclContext(), clang::Sema::getFunctionLevelDeclContext(), clang::Sema::getLangOpts(), clang::LookupResult::getNamingClass(), clang::DeclContext::getParent(), IMA_Abstract, IMA_Error_StaticContext, IMA_Error_Unrelated, IMA_Field_Uneval_Context, IMA_Instance, IMA_Mixed, IMA_Mixed_StaticContext, IMA_Mixed_Unrelated, IMA_Static, IMA_Unresolved, IMA_Unresolved_StaticContext, clang::NamedDecl::isCXXInstanceMember(), clang::QualType::isNull(), isProvablyNotDerivedFrom(), clang::LookupResult::isUnresolvableResult(), clang::Sema::PotentiallyEvaluated, clang::Sema::PotentiallyEvaluatedIfUsed, clang::Sema::Unevaluated, and clang::Sema::UnevaluatedAbstract.
Referenced by clang::Sema::BuildPossibleImplicitMemberExpr().
static void diagnoseInstanceReference | ( | Sema & | SemaRef, |
const CXXScopeSpec & | SS, | ||
NamedDecl * | Rep, | ||
const DeclarationNameInfo & | nameInfo | ||
) | [static] |
Diagnose a reference to a field with no object available.
Definition at line 200 of file SemaExprMember.cpp.
References clang::Sema::Diag(), clang::DeclContext::Encloses(), clang::DeclContext::Equals(), clang::SourceRange::getBegin(), clang::Decl::getDeclContext(), clang::Sema::getFunctionLevelDeclContext(), clang::DeclarationNameInfo::getLoc(), clang::DeclarationNameInfo::getName(), clang::CXXMethodDecl::getParent(), clang::CXXScopeSpec::getRange(), clang::CXXScopeSpec::isEmpty(), clang::CXXScopeSpec::isSet(), clang::CXXMethodDecl::isStatic(), and clang::SourceRange::setBegin().
Referenced by clang::Sema::BuildPossibleImplicitMemberExpr(), and DiagnoseQualifiedMemberReference().
static void DiagnoseQualifiedMemberReference | ( | Sema & | SemaRef, |
Expr * | BaseExpr, | ||
QualType | BaseType, | ||
const CXXScopeSpec & | SS, | ||
NamedDecl * | rep, | ||
const DeclarationNameInfo & | nameInfo | ||
) | [static] |
We know that the given qualified member reference points only to declarations which do not belong to the static type of the base expression. Diagnose the problem.
Definition at line 468 of file SemaExprMember.cpp.
References clang::Sema::Diag(), diagnoseInstanceReference(), clang::DeclarationNameInfo::getLoc(), and clang::CXXScopeSpec::getRange().
Referenced by clang::Sema::CheckQualifiedMemberReference().
static Decl* FindGetterSetterNameDecl | ( | const ObjCObjectPointerType * | QIdTy, |
IdentifierInfo * | Member, | ||
const Selector & | Sel, | ||
ASTContext & | Context | ||
) | [static] |
Definition at line 396 of file SemaExprMember.cpp.
References FindGetterSetterNameDeclFromProtocolList(), and clang::ObjCObjectPointerType::quals().
Referenced by LookupMemberExpr().
static Decl* FindGetterSetterNameDeclFromProtocolList | ( | const ObjCProtocolDecl * | PDecl, |
IdentifierInfo * | Member, | ||
const Selector & | Sel, | ||
ASTContext & | Context | ||
) | [static] |
Definition at line 378 of file SemaExprMember.cpp.
References clang::ObjCContainerDecl::FindPropertyDeclaration(), clang::ObjCContainerDecl::getInstanceMethod(), and clang::ObjCProtocolDecl::protocols().
Referenced by FindGetterSetterNameDecl().
static bool isPointerToRecordType | ( | QualType | T | ) | [static] |
Definition at line 1152 of file SemaExprMember.cpp.
References clang::Type::getAs().
Referenced by LookupMemberExpr().
static bool isProvablyNotDerivedFrom | ( | Sema & | SemaRef, |
CXXRecordDecl * | Record, | ||
const BaseSet & | Bases | ||
) | [static] |
Determines if the given class is provably not derived from all of the prospective base classes.
Definition at line 37 of file SemaExprMember.cpp.
References BaseIsNotInSet(), and clang::CXXRecordDecl::forallBases().
Referenced by ClassifyImplicitMemberAccess().
static bool isRecordType | ( | QualType | T | ) | [static] |
Definition at line 1149 of file SemaExprMember.cpp.
References clang::Type::isRecordType().
Referenced by clang::Sema::CreateOverloadedBinOp(), clang::Expr::EvaluateAsInitializer(), clang::Type::isCompoundType(), clang::Type::isOverloadableType(), and LookupMemberExpr().
static ExprResult LookupMemberExpr | ( | Sema & | S, |
LookupResult & | R, | ||
ExprResult & | BaseExpr, | ||
bool & | IsArrow, | ||
SourceLocation | OpLoc, | ||
CXXScopeSpec & | SS, | ||
Decl * | ObjCImpDecl, | ||
bool | HasTemplateArgs | ||
) | [static] |
Look up the given member of the given non-type-dependent expression. This can return in one of two ways: If it returns a sentinel null-but-valid result, the caller will assume that lookup was performed and the results written into the provided structure. It will take over from there. Otherwise, the returned expression will be produced in place of an ordinary member expression.
The ObjCImpDecl bit is a gross hack that will need to be properly fixed for ObjC++.
Definition at line 1177 of file SemaExprMember.cpp.
References CheckExtVectorComponent(), clang::CK_BitCast, clang::CXXScopeSpec::clear(), clang::SelectorTable::constructSetterSelector(), clang::Sema::Context, clang::Sema::CorrectTypo(), clang::FixItHint::CreateRemoval(), clang::FixItHint::CreateReplacement(), clang::Sema::CTK_ErrorRecovery, clang::DeclarationName::CXXDestructorName, clang::declaresSameEntity(), clang::Sema::DefaultFunctionArrayConversion(), clang::Sema::DefaultLvalueConversion(), clang::Sema::Diag(), clang::Sema::diagnoseTypo(), clang::Sema::DiagnoseUseOfDecl(), clang::Sema::Diags, clang::ExprError(), FindGetterSetterNameDecl(), clang::ObjCContainerDecl::FindPropertyDeclaration(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::ObjCIvarDecl::getAccessControl(), clang::Type::getAs(), clang::SourceRange::getBegin(), clang::ObjCMethodDecl::getClassInterface(), clang::Sema::getCurFunctionDecl(), clang::Sema::getCurMethodDecl(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::Preprocessor::getIdentifierTable(), clang::Sema::getLangOpts(), clang::LookupResult::getLookupName(), clang::LookupResult::getLookupNameInfo(), clang::LookupResult::getNameLoc(), clang::SelectorTable::getNullarySelector(), clang::ASTContext::getObjCClassType(), clang::QualType::getObjCLifetime(), clang::ASTContext::getObjCSelRedefinitionType(), clang::ObjCObjectPointerType::getObjectType(), clang::Type::getPointeeType(), clang::CXXScopeSpec::getRange(), clang::CXXScopeSpec::getScopeRep(), clang::Preprocessor::getSelectorTable(), clang::ValueDecl::getType(), clang::Sema::HandleExprPropertyRefExpr(), clang::ASTContext::hasSameUnqualifiedType(), clang::Expr::IgnoreParenCasts(), clang::Expr::IgnoreParenImpCasts(), clang::Sema::ImpCastExprToType(), clang::Type::isDependentType(), clang::CXXScopeSpec::isEmpty(), clang::Type::isExtVectorType(), clang::Type::isFunctionType(), clang::DiagnosticsEngine::isIgnored(), clang::CXXScopeSpec::isInvalid(), clang::Decl::isInvalidDecl(), clang::QualType::isNull(), clang::ObjCObjectType::isObjCClass(), clang::ObjCObjectType::isObjCId(), clang::Type::isObjCSelType(), isPointerToRecordType(), isRecordType(), clang::Type::isRecordType(), clang::Type::isSpecificBuiltinType(), clang::IdentifierInfo::isStr(), clang::ObjCInterfaceDecl::isSuperClassOf(), clang::Sema::IvarBacksCurrentMethodAccessor(), clang::ObjCInterfaceDecl::lookupClassMethod(), clang::ObjCInterfaceDecl::lookupInstanceVariable(), LookupMemberExprInRecord(), clang::Sema::LookupMemberName, clang::ObjCInterfaceDecl::lookupPrivateMethod(), clang::Qualifiers::OCL_Weak, clang::OK_ObjCProperty, clang::OMF_dealloc, clang::OMF_finalize, clang::OMF_init, clang::ObjCIvarDecl::Package, clang::Sema::PDiag(), clang::Sema::PerformMemberExprBaseConversion(), clang::Sema::PP, clang::ObjCIvarDecl::Private, clang::ASTContext::PseudoObjectTy, clang::ObjCIvarDecl::Public, clang::Sema::recordUseOfEvaluatedWeak(), clang::Sema::RequireCompleteType(), ShouldTryAgainWithRedefinitionType(), clang::Sema::tryToRecoverWithCall(), clang::UO_Deref, and clang::VK_LValue.
Referenced by clang::Sema::BuildMemberReferenceExpr().
static bool LookupMemberExprInRecord | ( | Sema & | SemaRef, |
LookupResult & | R, | ||
Expr * | BaseExpr, | ||
const RecordType * | RTy, | ||
SourceLocation | OpLoc, | ||
bool | IsArrow, | ||
CXXScopeSpec & | SS, | ||
bool | HasTemplateArgs, | ||
TypoExpr *& | TE | ||
) | [static] |
Definition at line 583 of file SemaExprMember.cpp.
References clang::LookupResult::addDecl(), clang::Sema::BuildMemberReferenceExpr(), clang::LookupResult::clear(), clang::Sema::computeDeclContext(), clang::Sema::CorrectTypoDelayed(), clang::Sema::CTK_ErrorRecovery, clang::Sema::Diag(), clang::Sema::diagnoseTypo(), clang::LookupResult::empty(), clang::TypoCorrection::getAsString(), clang::DeclarationName::getAsString(), clang::TypoCorrection::getCorrection(), clang::RecordType::getDecl(), clang::SourceRange::getEnd(), clang::Sema::getLangOpts(), clang::LookupResult::getLookupKind(), clang::LookupResult::getLookupName(), clang::LookupResult::getLookupNameInfo(), clang::LookupResult::getNameLoc(), clang::CXXScopeSpec::getRange(), clang::Stmt::getSourceRange(), clang::Expr::getType(), clang::TypoCorrection::isKeyword(), clang::CXXScopeSpec::isSet(), clang::Sema::isThisOutsideMemberFunctionBody(), clang::Sema::LookupQualifiedName(), clang::Sema::LookupTemplateName(), clang::Sema::PDiag(), clang::Sema::RequireCompleteDeclContext(), clang::Sema::RequireCompleteType(), clang::LookupResult::resolveKind(), clang::LookupResult::setLookupName(), clang::LookupResult::suppressDiagnostics(), Typo, and clang::TypoCorrection::WillReplaceSpecifier().
Referenced by clang::Sema::BuildMemberReferenceExpr(), and LookupMemberExpr().
static bool ShouldTryAgainWithRedefinitionType | ( | Sema & | S, |
ExprResult & | base | ||
) | [static] |
Given that normal member access failed on the given expression, and given that the expression's type involves builtin-id or builtin-Class, decide whether substituting in the redefinition types would be profitable. The redefinition type is whatever this translation unit tried to typedef to id/Class; we store it to the side and then re-use it in places like this.
Definition at line 1123 of file SemaExprMember.cpp.
References clang::CK_BitCast, clang::Sema::Context, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), clang::ObjCObjectType::getInterface(), clang::ASTContext::getObjCClassRedefinitionType(), clang::ASTContext::getObjCIdRedefinitionType(), clang::ObjCObjectPointerType::getObjectType(), clang::Expr::getType(), clang::Sema::ImpCastExprToType(), clang::ObjCObjectType::isObjCClass(), and clang::ObjCObjectType::isObjCId().
Referenced by LookupMemberExpr().