clang API Documentation

Defines | Enumerations | Functions
SemaDeclCXX.cpp File Reference
#include "clang/Sema/SemaInternal.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTLambda.h"
#include "clang/AST/ASTMutationListener.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/CharUnits.h"
#include "clang/AST/EvaluatedExprVisitor.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/RecordLayout.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/AST/TypeLoc.h"
#include "clang/AST/TypeOrdering.h"
#include "clang/Basic/PartialDiagnostic.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/LiteralSupport.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/CXXFieldCollector.h"
#include "clang/Sema/DeclSpec.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/ParsedTemplate.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/Template.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include <map>
#include <set>
#include "clang/AST/TypeLocNodes.def"
#include "clang/Basic/OperatorKinds.def"
Include dependency graph for SemaDeclCXX.cpp:

Go to the source code of this file.

Defines

#define ABSTRACT_TYPELOC(CLASS, PARENT)
#define TYPELOC(CLASS, PARENT)   case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break;
#define CheckPolymorphic(Type)
#define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly)   , { Unary, Binary, MemberOnly }

Enumerations

enum  ImplicitInitializerKind { IIK_Default, IIK_Copy, IIK_Move, IIK_Inherit }
enum  TrivialSubobjectKind { TSK_BaseClass, TSK_Field, TSK_CompleteObject }

Functions

static bool functionDeclHasDefaultArgument (const FunctionDecl *FD)
static bool CheckConstexprParameterTypes (Sema &SemaRef, const FunctionDecl *FD)
static unsigned getRecordDiagFromTagKind (TagTypeKind Tag)
 Get diagnostic select index for tag kind for record diagnostic message. WARNING: Indexes apply to particular diagnostics only!
static bool CheckConstexprDeclStmt (Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc)
static void CheckConstexprCtorInitializer (Sema &SemaRef, const FunctionDecl *Dcl, FieldDecl *Field, llvm::SmallSet< Decl *, 16 > &Inits, bool &Diagnosed)
static bool CheckConstexprFunctionStmt (Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, SmallVectorImpl< SourceLocation > &ReturnStmts, SourceLocation &Cxx1yLoc)
static bool findCircularInheritance (const CXXRecordDecl *Class, const CXXRecordDecl *Current)
 Determine whether the given class is a base class of the given class, including looking at dependent bases.
static void propagateDLLAttrToBaseClassTemplate (Sema &S, CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc)
 Perform propagation of DLL attributes from a derived class to a templated base class for MS compatibility.
static bool InitializationHasSideEffects (const FieldDecl &FD)
static AttributeListgetMSPropertyAttr (AttributeList *list)
static bool FindBaseInitializer (Sema &SemaRef, CXXRecordDecl *ClassDecl, QualType BaseType, const CXXBaseSpecifier *&DirectBaseSpec, const CXXBaseSpecifier *&VirtualBaseSpec)
 Find the direct and/or virtual base specifiers that correspond to the given base type, for use in base initialization within a constructor.
static void CheckForDanglingReferenceOrPointer (Sema &S, ValueDecl *Member, Expr *Init, SourceLocation IdLoc)
static ExprCastForMoving (Sema &SemaRef, Expr *E, QualType T=QualType())
static bool BuildImplicitBaseInitializer (Sema &SemaRef, CXXConstructorDecl *Constructor, ImplicitInitializerKind ImplicitInitKind, CXXBaseSpecifier *BaseSpec, bool IsInheritedVirtualBase, CXXCtorInitializer *&CXXBaseInit)
static bool RefersToRValueRef (Expr *MemRef)
static bool BuildImplicitMemberInitializer (Sema &SemaRef, CXXConstructorDecl *Constructor, ImplicitInitializerKind ImplicitInitKind, FieldDecl *Field, IndirectFieldDecl *Indirect, CXXCtorInitializer *&CXXMemberInit)
static bool isIncompleteOrZeroLengthArrayType (ASTContext &Context, QualType T)
 Determine whether the given type is an incomplete or zero-lenfgth array type.
static bool CollectFieldInitializer (Sema &SemaRef, BaseAndFieldInfo &Info, FieldDecl *Field, IndirectFieldDecl *Indirect=nullptr)
static void PopulateKeysForFields (FieldDecl *Field, SmallVectorImpl< const void * > &IdealInits)
static const void * GetKeyForBase (ASTContext &Context, QualType BaseType)
static const void * GetKeyForMember (ASTContext &Context, CXXCtorInitializer *Member)
static void DiagnoseBaseOrMemInitializerOrder (Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef< CXXCtorInitializer * > Inits)
static void CheckAbstractClassUsage (AbstractUsageInfo &Info, CXXMethodDecl *MD)
 Check for invalid uses of an abstract type in a method declaration.
static void CheckAbstractClassUsage (AbstractUsageInfo &Info, CXXRecordDecl *RD)
 Check for invalid uses of an abstract type within a class definition.
static void checkDLLAttribute (Sema &S, CXXRecordDecl *Class)
 Check class-level dllimport/dllexport attribute.
static
Sema::SpecialMemberOverloadResult
lookupCallFromSpecialMember (Sema &S, CXXRecordDecl *Class, Sema::CXXSpecialMember CSM, unsigned FieldQuals, bool ConstRHS)
static bool specialMemberIsConstexpr (Sema &S, CXXRecordDecl *ClassDecl, Sema::CXXSpecialMember CSM, unsigned Quals, bool ConstRHS)
static bool defaultedSpecialMemberIsConstexpr (Sema &S, CXXRecordDecl *ClassDecl, Sema::CXXSpecialMember CSM, bool ConstArg)
static
Sema::ImplicitExceptionSpecification 
computeImplicitExceptionSpec (Sema &S, SourceLocation Loc, CXXMethodDecl *MD)
static
FunctionProtoType::ExtProtoInfo 
getImplicitMethodEPI (Sema &S, CXXMethodDecl *MD)
static bool findTrivialSpecialMember (Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM, unsigned Quals, bool ConstRHS, CXXMethodDecl **Selected)
static CXXConstructorDeclfindUserDeclaredCtor (CXXRecordDecl *RD)
static bool checkTrivialSubobjectCall (Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, bool Diagnose)
 Check whether the special member selected for a given type would be trivial.
static bool checkTrivialClassMembers (Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM, bool ConstArg, bool Diagnose)
static bool CheckMostOverridenMethods (const CXXMethodDecl *MD, const llvm::SmallPtrSetImpl< const CXXMethodDecl * > &Methods)
 Check whether any most overriden method from MD in Methods.
static bool FindHiddenVirtualMethod (const CXXBaseSpecifier *Specifier, CXXBasePath &Path, void *UserData)
 Member lookup function that determines whether a given C++ method overloads virtual methods in a base class without overriding any, to be used with CXXRecordDecl::lookupInBases().
static void AddMostOverridenMethods (const CXXMethodDecl *MD, llvm::SmallPtrSetImpl< const CXXMethodDecl * > &Methods)
 Add the most overriden methods from MD to Methods.
static void DiagnoseNamespaceInlineMismatch (Sema &S, SourceLocation KeywordLoc, SourceLocation Loc, IdentifierInfo *II, bool *IsInline, NamespaceDecl *PrevNS)
 Diagnose a mismatch in 'inline' qualifiers when a namespace is reopened.
static NamespaceDeclgetNamespaceDecl (NamedDecl *D)
static ClassTemplateDeclLookupStdInitializerList (Sema &S, SourceLocation Loc)
static bool IsUsingDirectiveInToplevelContext (DeclContext *CurContext)
 Determine whether a using statement is in a context where it will be apply in all contexts.
static bool TryNamespaceTypoCorrection (Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident)
static bool IsEquivalentForUsingDecl (ASTContext &Context, NamedDecl *D1, NamedDecl *D2)
 Determine whether a using declaration considers the given declarations as "equivalent", e.g., if they are redeclarations of the same entity or are both typedefs of the same type.
static CXXBaseSpecifierfindDirectBaseWithType (CXXRecordDecl *Derived, QualType DesiredBase, bool &AnyDependentBases)
 Find the base specifier for a base class with the given type.
static StmtResult buildMemcpyForAssignmentOp (Sema &S, SourceLocation Loc, QualType T, const ExprBuilder &ToB, const ExprBuilder &FromB)
static StmtResult buildSingleCopyAssignRecursively (Sema &S, SourceLocation Loc, QualType T, const ExprBuilder &To, const ExprBuilder &From, bool CopyingBaseSubobject, bool Copying, unsigned Depth=0)
 Builds a statement that copies/moves the given entity from From to To.
static StmtResult buildSingleCopyAssign (Sema &S, SourceLocation Loc, QualType T, const ExprBuilder &To, const ExprBuilder &From, bool CopyingBaseSubobject, bool Copying)
static void diagnoseDeprecatedCopyOperation (Sema &S, CXXMethodDecl *CopyOp, SourceLocation UseLoc)
static void checkMoveAssignmentForRepeatedMove (Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation)
static bool hasOneRealArgument (MultiExprArg Args)
 Determine whether the given list arguments contains exactly one "real" (non-default) argument.
static bool CheckOperatorNewDeleteDeclarationScope (Sema &SemaRef, const FunctionDecl *FnDecl)
static bool CheckOperatorNewDeleteTypes (Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag)
static bool CheckOperatorNewDeclaration (Sema &SemaRef, const FunctionDecl *FnDecl)
static bool CheckOperatorDeleteDeclaration (Sema &SemaRef, FunctionDecl *FnDecl)
static void SearchForReturnInStmt (Sema &Self, Stmt *S)
static bool isStaticDataMember (const Decl *D)
 Determine whether the given declaration is a static data member.
static void DelegatingCycleHelper (CXXConstructorDecl *Ctor, llvm::SmallSet< CXXConstructorDecl *, 4 > &Valid, llvm::SmallSet< CXXConstructorDecl *, 4 > &Invalid, llvm::SmallSet< CXXConstructorDecl *, 4 > &Current, Sema &S)

Define Documentation

#define ABSTRACT_TYPELOC (   CLASS,
  PARENT 
)
#define CheckPolymorphic (   Type)
Value:
void Check(Type TL, Sema::AbstractDiagSelID Sel) { \
    Visit(TL.getNextTypeLoc(), Sema::AbstractNone); \
  }

Definition at line 4521 of file SemaDeclCXX.cpp.

#define OVERLOADED_OPERATOR (   Name,
  Spelling,
  Token,
  Unary,
  Binary,
  MemberOnly 
)    , { Unary, Binary, MemberOnly }
#define TYPELOC (   CLASS,
  PARENT 
)    case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break;

Enumeration Type Documentation

ImplicitInitializerKind - How an implicit base or member initializer should initialize its base or member.

Enumerator:
IIK_Default 
IIK_Copy 
IIK_Move 
IIK_Inherit 

Definition at line 3258 of file SemaDeclCXX.cpp.

The kind of subobject we are checking for triviality. The values of this enumeration are used in diagnostics.

Enumerator:
TSK_BaseClass 

The subobject is a base class.

TSK_Field 

The subobject is a non-static data member.

TSK_CompleteObject 

The object is actually the complete object.

Definition at line 5915 of file SemaDeclCXX.cpp.


Function Documentation

static void AddMostOverridenMethods ( const CXXMethodDecl MD,
llvm::SmallPtrSetImpl< const CXXMethodDecl * > &  Methods 
) [static]
static bool BuildImplicitBaseInitializer ( Sema SemaRef,
CXXConstructorDecl Constructor,
ImplicitInitializerKind  ImplicitInitKind,
CXXBaseSpecifier BaseSpec,
bool  IsInheritedVirtualBase,
CXXCtorInitializer *&  CXXBaseInit 
) [static]
static bool BuildImplicitMemberInitializer ( Sema SemaRef,
CXXConstructorDecl Constructor,
ImplicitInitializerKind  ImplicitInitKind,
FieldDecl Field,
IndirectFieldDecl Indirect,
CXXCtorInitializer *&  CXXMemberInit 
) [static]

Definition at line 3376 of file SemaDeclCXX.cpp.

References clang::LookupResult::addDecl(), clang::AS_public, clang::Sema::BuildDeclRefExpr(), clang::Sema::BuildMemberReferenceExpr(), CastForMoving(), clang::Sema::Context, clang::VarDecl::Create(), clang::DeclRefExpr::Create(), clang::CXXCtorInitializer::Create(), clang::Sema::CreateBuiltinArraySubscriptExpr(), clang::InitializationKind::CreateDefault(), clang::InitializationKind::CreateDirect(), clang::Sema::CurContext, clang::Sema::DefaultLvalueConversion(), clang::Sema::Diag(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::IdentifierTable::get(), clang::ActionResult< PtrTy, CompressInvalid >::getAs(), clang::ASTContext::getAsConstantArrayType(), clang::ASTContext::getBaseElementType(), clang::FieldDecl::getBitWidthValue(), clang::NamedDecl::getDeclName(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::QualType::getNonReferenceType(), clang::QualType::getObjCLifetime(), clang::FunctionDecl::getParamDecl(), clang::CXXMethodDecl::getParent(), clang::FieldDecl::getParent(), clang::ASTContext::getSizeType(), clang::ASTContext::getTagDeclType(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::ValueDecl::getType(), clang::ASTContext::Idents, IIK_Copy, IIK_Default, IIK_Inherit, IIK_Move, clang::InitializedEntity::InitializeElement(), clang::InitializedEntity::InitializeMember(), clang::FieldDecl::isBitField(), clang::QualType::isConstQualified(), clang::Decl::isImplicit(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Decl::isInvalidDecl(), clang::Type::isObjCRetainableType(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::TagDecl::isUnion(), clang::Sema::LookupMemberName, clang::Sema::MarkDeclRefReferenced(), clang::Sema::MaybeCreateExprWithCleanups(), clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::InitializationSequence::Perform(), RefersToRValueRef(), clang::SC_None, and clang::VK_LValue.

Referenced by CollectFieldInitializer().

static StmtResult buildMemcpyForAssignmentOp ( Sema S,
SourceLocation  Loc,
QualType  T,
const ExprBuilder &  ToB,
const ExprBuilder &  FromB 
) [static]
static StmtResult buildSingleCopyAssign ( Sema S,
SourceLocation  Loc,
QualType  T,
const ExprBuilder &  To,
const ExprBuilder &  From,
bool  CopyingBaseSubobject,
bool  Copying 
) [static]
static StmtResult buildSingleCopyAssignRecursively ( Sema S,
SourceLocation  Loc,
QualType  T,
const ExprBuilder &  To,
const ExprBuilder &  From,
bool  CopyingBaseSubobject,
bool  Copying,
unsigned  Depth = 0 
) [static]

Builds a statement that copies/moves the given entity from From to To.

This routine is used to copy/move the members of a class with an implicitly-declared copy/move assignment operator. When the entities being copied are arrays, this routine builds for loops to copy them.

Parameters:
SThe Sema object used for type-checking.
LocThe location where the implicit copy/move is being generated.
TThe type of the expressions being copied/moved. Both expressions must have this type.
ToThe expression we are copying/moving to.
FromThe expression we are copying/moving from.
CopyingBaseSubobjectWhether we're copying/moving a base subobject. Otherwise, it's a non-static member subobject.
CopyingWhether we're copying or moving.
DepthInternal parameter recording the depth of the recursion.
Returns:
A statement or a loop that copies the expressions, or StmtResult(0) if a memcpy should be used instead.

Definition at line 9521 of file SemaDeclCXX.cpp.

References clang::Sema::ActOnExprStmt(), clang::Sema::ActOnForStmt(), clang::AS_protected, clang::AS_public, clang::prec::Assignment, clang::LookupResult::begin(), clang::BO_Assign, clang::BO_NE, clang::ASTContext::BoolTy, clang::Sema::BuildCallToMemberFunction(), clang::Sema::BuildMemberReferenceExpr(), clang::Sema::Context, clang::NestedNameSpecifier::Create(), clang::VarDecl::Create(), clang::IntegerLiteral::Create(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::CurContext, clang::ASTContext::DeclarationNames, Depth, clang::LookupResult::Filter::done(), clang::LookupResult::end(), clang::LookupResult::Filter::erase(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::IdentifierTable::get(), clang::ActionResult< PtrTy, CompressInvalid >::getAs(), clang::Type::getAs(), clang::ASTContext::getAsConstantArrayType(), clang::ASTContext::getCanonicalType(), clang::DeclarationNameTable::getCXXOperatorName(), clang::ArrayType::getElementType(), clang::Sema::getLangOpts(), clang::CXXMemberCallExpr::getMethodDecl(), clang::ConstantArrayType::getSize(), clang::ASTContext::getSizeType(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::QualType::getTypePtr(), clang::ASTContext::getTypeSize(), clang::LookupResult::Filter::hasNext(), clang::ASTContext::Idents, clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::FunctionDecl::isTrivial(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupQualifiedName(), clang::LookupResult::makeFilter(), clang::Sema::MakeFullDiscardedValueExpr(), clang::Sema::MakeFullExpr(), clang::CXXScopeSpec::MakeTrivial(), clang::LookupResult::Filter::next(), clang::OK_Ordinary, clang::SC_None, clang::VarDecl::setInit(), clang::StmtError(), clang::UO_PreInc, clang::VK_LValue, and clang::VK_RValue.

Referenced by buildSingleCopyAssign().

static Expr* CastForMoving ( Sema SemaRef,
Expr E,
QualType  T = QualType() 
) [static]
static void CheckAbstractClassUsage ( AbstractUsageInfo &  Info,
CXXMethodDecl MD 
) [static]
static void CheckAbstractClassUsage ( AbstractUsageInfo &  Info,
CXXRecordDecl RD 
) [static]
static void CheckConstexprCtorInitializer ( Sema SemaRef,
const FunctionDecl Dcl,
FieldDecl Field,
llvm::SmallSet< Decl *, 16 > &  Inits,
bool Diagnosed 
) [static]

Check that the given field is initialized within a constexpr constructor.

Parameters:
DclThe constexpr constructor being checked.
FieldThe field being checked. This may be a member of an anonymous struct or union nested within the class being checked.
InitsAll declarations, including anonymous struct/union members and indirect members, for which any initialization was provided.
DiagnosedSet to true if an error is produced.

Definition at line 939 of file SemaDeclCXX.cpp.

References clang::Type::castAs(), clang::Sema::Diag(), clang::Type::getAsCXXRecordDecl(), clang::Decl::getLocation(), clang::ValueDecl::getType(), clang::CXXRecordDecl::hasVariantMembers(), clang::FieldDecl::isAnonymousStructOrUnion(), clang::CXXRecordDecl::isEmpty(), clang::Decl::isInvalidDecl(), clang::TagDecl::isUnion(), clang::Type::isUnionType(), and clang::FieldDecl::isUnnamedBitfield().

Referenced by clang::Sema::CheckConstexprFunctionBody().

static bool CheckConstexprDeclStmt ( Sema SemaRef,
const FunctionDecl Dcl,
DeclStmt DS,
SourceLocation Cxx1yLoc 
) [static]

Check the given declaration statement is legal within a constexpr function body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.

Returns:
true if the body is OK (maybe only as an extension), false if we have diagnosed a problem.

Definition at line 826 of file SemaDeclCXX.cpp.

References clang::DeclStmt::decls(), clang::Sema::Diag(), clang::TypeLoc::getBeginLoc(), clang::Sema::getLangOpts(), clang::DeclStmt::getLocStart(), clang::TypeLoc::getSourceRange(), clang::TypeLoc::getType(), clang::SourceLocation::isValid(), clang::Sema::RequireLiteralType(), and clang::VarDecl::TLS_Dynamic.

Referenced by CheckConstexprFunctionStmt().

static bool CheckConstexprFunctionStmt ( Sema SemaRef,
const FunctionDecl Dcl,
Stmt S,
SmallVectorImpl< SourceLocation > &  ReturnStmts,
SourceLocation Cxx1yLoc 
) [static]
static bool CheckConstexprParameterTypes ( Sema SemaRef,
const FunctionDecl FD 
) [static]
static void checkDLLAttribute ( Sema S,
CXXRecordDecl Class 
) [static]
static void CheckForDanglingReferenceOrPointer ( Sema S,
ValueDecl Member,
Expr Init,
SourceLocation  IdLoc 
) [static]
static bool CheckMostOverridenMethods ( const CXXMethodDecl MD,
const llvm::SmallPtrSetImpl< const CXXMethodDecl * > &  Methods 
) [static]
static void checkMoveAssignmentForRepeatedMove ( Sema S,
CXXRecordDecl Class,
SourceLocation  CurrentLocation 
) [static]
static bool CheckOperatorDeleteDeclaration ( Sema SemaRef,
FunctionDecl FnDecl 
) [static]
static bool CheckOperatorNewDeclaration ( Sema SemaRef,
const FunctionDecl FnDecl 
) [static]
static bool CheckOperatorNewDeleteDeclarationScope ( Sema SemaRef,
const FunctionDecl FnDecl 
) [inline, static]
static bool CheckOperatorNewDeleteTypes ( Sema SemaRef,
const FunctionDecl FnDecl,
CanQualType  ExpectedResultType,
CanQualType  ExpectedFirstParamType,
unsigned  DependentParamTypeDiag,
unsigned  InvalidParamTypeDiag 
) [inline, static]
static bool checkTrivialClassMembers ( Sema S,
CXXRecordDecl RD,
Sema::CXXSpecialMember  CSM,
bool  ConstArg,
bool  Diagnose 
) [static]
static bool checkTrivialSubobjectCall ( Sema S,
SourceLocation  SubobjLoc,
QualType  SubType,
bool  ConstRHS,
Sema::CXXSpecialMember  CSM,
TrivialSubobjectKind  Kind,
bool  Diagnose 
) [static]
static bool CollectFieldInitializer ( Sema SemaRef,
BaseAndFieldInfo &  Info,
FieldDecl Field,
IndirectFieldDecl Indirect = nullptr 
) [static]
static bool defaultedSpecialMemberIsConstexpr ( Sema S,
CXXRecordDecl ClassDecl,
Sema::CXXSpecialMember  CSM,
bool  ConstArg 
) [static]
static void DelegatingCycleHelper ( CXXConstructorDecl Ctor,
llvm::SmallSet< CXXConstructorDecl *, 4 > &  Valid,
llvm::SmallSet< CXXConstructorDecl *, 4 > &  Invalid,
llvm::SmallSet< CXXConstructorDecl *, 4 > &  Current,
Sema S 
) [static]
static void DiagnoseBaseOrMemInitializerOrder ( Sema SemaRef,
const CXXConstructorDecl Constructor,
ArrayRef< CXXCtorInitializer * >  Inits 
) [static]
static void diagnoseDeprecatedCopyOperation ( Sema S,
CXXMethodDecl CopyOp,
SourceLocation  UseLoc 
) [static]

Diagnose an implicit copy operation for a class which is odr-used, but which is deprecated because the class has a user-declared copy constructor, copy assignment operator, or destructor.

Definition at line 9865 of file SemaDeclCXX.cpp.

References clang::Sema::CXXCopyAssignment, clang::Sema::CXXCopyConstructor, clang::Sema::Diag(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::CXXMethodDecl::getParent(), and clang::Decl::isImplicit().

Referenced by clang::Sema::DefineImplicitCopyAssignment(), and clang::Sema::DefineImplicitCopyConstructor().

static void DiagnoseNamespaceInlineMismatch ( Sema S,
SourceLocation  KeywordLoc,
SourceLocation  Loc,
IdentifierInfo II,
bool IsInline,
NamespaceDecl PrevNS 
) [static]
static bool FindBaseInitializer ( Sema SemaRef,
CXXRecordDecl ClassDecl,
QualType  BaseType,
const CXXBaseSpecifier *&  DirectBaseSpec,
const CXXBaseSpecifier *&  VirtualBaseSpec 
) [static]
static bool findCircularInheritance ( const CXXRecordDecl Class,
const CXXRecordDecl Current 
) [static]

Determine whether the given class is a base class of the given class, including looking at dependent bases.

Definition at line 1279 of file SemaDeclCXX.cpp.

References clang::CXXRecordDecl::bases(), clang::CXXRecordDecl::getCanonicalDecl(), and clang::CXXRecordDecl::getDefinition().

Referenced by clang::Sema::CheckBaseSpecifier().

static CXXBaseSpecifier* findDirectBaseWithType ( CXXRecordDecl Derived,
QualType  DesiredBase,
bool AnyDependentBases 
) [static]

Find the base specifier for a base class with the given type.

Definition at line 7762 of file SemaDeclCXX.cpp.

References clang::CodeGen::Base, clang::CXXRecordDecl::bases(), clang::Type::getCanonicalTypeUnqualified(), and clang::CXXBaseSpecifier::getType().

Referenced by clang::Sema::CheckInheritingConstructorUsingDecl().

static bool FindHiddenVirtualMethod ( const CXXBaseSpecifier Specifier,
CXXBasePath Path,
void *  UserData 
) [static]

Member lookup function that determines whether a given C++ method overloads virtual methods in a base class without overriding any, to be used with CXXRecordDecl::lookupInBases().

Definition at line 6199 of file SemaDeclCXX.cpp.

References CheckMostOverridenMethods(), clang::CXXBasePath::Decls, clang::Type::getAs(), clang::CXXMethodDecl::getCanonicalDecl(), clang::DeclarationName::getNameKind(), clang::CXXBaseSpecifier::getType(), clang::DeclarationName::Identifier, clang::CXXMethodDecl::isVirtual(), and clang::DeclContext::lookup().

Referenced by clang::Sema::FindHiddenVirtualMethods().

static bool findTrivialSpecialMember ( Sema S,
CXXRecordDecl RD,
Sema::CXXSpecialMember  CSM,
unsigned  Quals,
bool  ConstRHS,
CXXMethodDecl **  Selected 
) [static]

Perform lookup for a special member of the specified kind, and determine whether it is trivial. If the triviality can be determined without the lookup, skip it. This is intended for use when determining whether a special member of a containing object is trivial, and thus does not ever perform overload resolution for default constructors.

If Selected is not NULL, *Selected will be filled in with the member that was most likely to be intended to be trivial, if any.

Definition at line 5780 of file SemaDeclCXX.cpp.

References clang::Sema::SpecialMemberOverloadResult::Ambiguous, clang::Qualifiers::Const, clang::CXXRecordDecl::ctors(), clang::Sema::CXXCopyAssignment, clang::Sema::CXXCopyConstructor, clang::Sema::CXXDefaultConstructor, clang::Sema::CXXDestructor, clang::Sema::CXXInvalid, clang::Sema::CXXMoveAssignment, clang::Sema::CXXMoveConstructor, clang::Sema::DeclareImplicitDefaultConstructor(), clang::Sema::DeclareImplicitDestructor(), clang::CXXRecordDecl::getDestructor(), clang::Sema::SpecialMemberOverloadResult::getKind(), clang::Sema::SpecialMemberOverloadResult::getMethod(), clang::CXXRecordDecl::hasTrivialCopyAssignment(), clang::CXXRecordDecl::hasTrivialCopyConstructor(), clang::CXXRecordDecl::hasTrivialDefaultConstructor(), clang::CXXRecordDecl::hasTrivialDestructor(), clang::FunctionDecl::isTrivial(), clang::CXXMethodDecl::isUserProvided(), lookupCallFromSpecialMember(), clang::CXXRecordDecl::needsImplicitDefaultConstructor(), clang::CXXRecordDecl::needsImplicitDestructor(), and clang::Sema::SpecialMemberOverloadResult::NoMemberOrDeleted.

Referenced by checkTrivialSubobjectCall().

static bool functionDeclHasDefaultArgument ( const FunctionDecl FD) [static]
static const void* GetKeyForBase ( ASTContext Context,
QualType  BaseType 
) [static]
static const void* GetKeyForMember ( ASTContext Context,
CXXCtorInitializer Member 
) [static]
static AttributeList* getMSPropertyAttr ( AttributeList list) [static]

Definition at line 1951 of file SemaDeclCXX.cpp.

References clang::AttributeList::getNext().

Referenced by clang::Sema::ActOnCXXMemberDeclarator().

static NamespaceDecl* getNamespaceDecl ( NamedDecl D) [inline, static]

getNamespaceDecl - Returns the namespace a decl represents. If the decl is a namespace alias, returns the namespace it points to.

Definition at line 7138 of file SemaDeclCXX.cpp.

Referenced by clang::Sema::ActOnNamespaceAliasDef(), and clang::Sema::ActOnUsingDirective().

static unsigned getRecordDiagFromTagKind ( TagTypeKind  Tag) [static]

Get diagnostic select index for tag kind for record diagnostic message. WARNING: Indexes apply to particular diagnostics only!

Returns:
diagnostic select index.

Definition at line 752 of file SemaDeclCXX.cpp.

References clang::TTK_Class, clang::TTK_Interface, and clang::TTK_Struct.

Referenced by clang::Sema::AttachBaseSpecifiers(), and clang::Sema::CheckConstexprFunctionDecl().

static bool hasOneRealArgument ( MultiExprArg  Args) [static]

Determine whether the given list arguments contains exactly one "real" (non-default) argument.

Definition at line 11041 of file SemaDeclCXX.cpp.

Referenced by clang::Sema::BuildCXXConstructExpr().

static bool InitializationHasSideEffects ( const FieldDecl FD) [static]
static bool IsEquivalentForUsingDecl ( ASTContext Context,
NamedDecl D1,
NamedDecl D2 
) [static]

Determine whether a using declaration considers the given declarations as "equivalent", e.g., if they are redeclarations of the same entity or are both typedefs of the same type.

Definition at line 7537 of file SemaDeclCXX.cpp.

References clang::Decl::getCanonicalDecl(), and clang::ASTContext::hasSameType().

Referenced by clang::Sema::CheckUsingShadowDecl().

static bool isIncompleteOrZeroLengthArrayType ( ASTContext Context,
QualType  T 
) [static]

Determine whether the given type is an incomplete or zero-lenfgth array type.

Definition at line 3693 of file SemaDeclCXX.cpp.

References clang::ASTContext::getAsConstantArrayType(), and clang::Type::isIncompleteArrayType().

Referenced by CollectFieldInitializer(), and clang::Sema::MarkBaseAndMemberDestructorsReferenced().

static bool isStaticDataMember ( const Decl D) [static]

Determine whether the given declaration is a static data member.

Definition at line 12825 of file SemaDeclCXX.cpp.

Referenced by clang::Sema::ActOnCXXEnterDeclInitializer(), clang::Sema::ActOnCXXExitDeclInitializer(), and clang::VarDecl::isFileVarDecl().

static bool IsUsingDirectiveInToplevelContext ( DeclContext CurContext) [static]

Determine whether a using statement is in a context where it will be apply in all contexts.

Definition at line 7310 of file SemaDeclCXX.cpp.

References clang::DeclContext::getDeclKind(), and clang::DeclContext::getParent().

Referenced by clang::Sema::ActOnUsingDirective().

static Sema::SpecialMemberOverloadResult* lookupCallFromSpecialMember ( Sema S,
CXXRecordDecl Class,
Sema::CXXSpecialMember  CSM,
unsigned  FieldQuals,
bool  ConstRHS 
) [static]

Look up the special member function that would be called by a special member function for a subobject of class type.

Parameters:
ClassThe class type of the subobject.
CSMThe kind of special member function.
FieldQualsIf the subobject is a field, its cv-qualifiers.
ConstRHSTrue if this is a copy operation with a const object on its RHS, that is, if the argument to the outer special member function is 'const' and this is not a field marked 'mutable'.

Definition at line 4928 of file SemaDeclCXX.cpp.

References clang::Qualifiers::Const, clang::Sema::CXXCopyAssignment, clang::Sema::CXXDefaultConstructor, clang::Sema::CXXDestructor, clang::Sema::CXXMoveAssignment, clang::Sema::LookupSpecialMember(), and clang::Qualifiers::Volatile.

Referenced by findTrivialSpecialMember(), and specialMemberIsConstexpr().

static ClassTemplateDecl* LookupStdInitializerList ( Sema S,
SourceLocation  Loc 
) [static]
static void PopulateKeysForFields ( FieldDecl Field,
SmallVectorImpl< const void * > &  IdealInits 
) [static]
static void propagateDLLAttrToBaseClassTemplate ( Sema S,
CXXRecordDecl Class,
Attr ClassAttr,
ClassTemplateSpecializationDecl BaseTemplateSpec,
SourceLocation  BaseLoc 
) [static]
static bool RefersToRValueRef ( Expr MemRef) [static]
static void SearchForReturnInStmt ( Sema Self,
Stmt S 
) [static]
static bool specialMemberIsConstexpr ( Sema S,
CXXRecordDecl ClassDecl,
Sema::CXXSpecialMember  CSM,
unsigned  Quals,
bool  ConstRHS 
) [static]

Is the special member function which would be selected to perform the specified operation on the specified class type a constexpr constructor?

Definition at line 4951 of file SemaDeclCXX.cpp.

References clang::Sema::SpecialMemberOverloadResult::getMethod(), clang::FunctionDecl::isConstexpr(), and lookupCallFromSpecialMember().

Referenced by defaultedSpecialMemberIsConstexpr().

static bool TryNamespaceTypoCorrection ( Sema S,
LookupResult R,
Scope Sc,
CXXScopeSpec SS,
SourceLocation  IdentLoc,
IdentifierInfo Ident 
) [static]