mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 12:26:52 +08:00
Eliminate the ASTContext argument to CXXConstructorDecl::isCopyConstructor, since the context is available in the Decl
llvm-svn: 91862
This commit is contained in:
@@ -1178,14 +1178,14 @@ public:
|
||||
/// X(const X&);
|
||||
/// };
|
||||
/// @endcode
|
||||
bool isCopyConstructor(ASTContext &Context, unsigned &TypeQuals) const;
|
||||
bool isCopyConstructor(unsigned &TypeQuals) const;
|
||||
|
||||
/// isCopyConstructor - Whether this constructor is a copy
|
||||
/// constructor (C++ [class.copy]p2, which can be used to copy the
|
||||
/// class.
|
||||
bool isCopyConstructor(ASTContext &Context) const {
|
||||
bool isCopyConstructor() const {
|
||||
unsigned TypeQuals = 0;
|
||||
return isCopyConstructor(Context, TypeQuals);
|
||||
return isCopyConstructor(TypeQuals);
|
||||
}
|
||||
|
||||
/// isConvertingConstructor - Whether this constructor is a
|
||||
|
||||
@@ -164,8 +164,7 @@ CXXConstructorDecl *CXXRecordDecl::getCopyConstructor(ASTContext &Context,
|
||||
if (isa<FunctionTemplateDecl>(*Con))
|
||||
continue;
|
||||
|
||||
if (cast<CXXConstructorDecl>(*Con)->isCopyConstructor(Context,
|
||||
FoundTQs)) {
|
||||
if (cast<CXXConstructorDecl>(*Con)->isCopyConstructor(FoundTQs)) {
|
||||
if (((TypeQuals & Qualifiers::Const) == (FoundTQs & Qualifiers::Const)) ||
|
||||
(!(TypeQuals & Qualifiers::Const) && (FoundTQs & Qualifiers::Const)))
|
||||
return cast<CXXConstructorDecl>(*Con);
|
||||
@@ -246,7 +245,7 @@ CXXRecordDecl::addedConstructor(ASTContext &Context,
|
||||
|
||||
// Note when we have a user-declared copy constructor, which will
|
||||
// suppress the implicit declaration of a copy constructor.
|
||||
if (ConDecl->isCopyConstructor(Context)) {
|
||||
if (ConDecl->isCopyConstructor()) {
|
||||
UserDeclaredCopyConstructor = true;
|
||||
|
||||
// C++ [class.copy]p6:
|
||||
@@ -757,8 +756,7 @@ bool CXXConstructorDecl::isDefaultConstructor() const {
|
||||
}
|
||||
|
||||
bool
|
||||
CXXConstructorDecl::isCopyConstructor(ASTContext &Context,
|
||||
unsigned &TypeQuals) const {
|
||||
CXXConstructorDecl::isCopyConstructor(unsigned &TypeQuals) const {
|
||||
// C++ [class.copy]p2:
|
||||
// A non-template constructor for class X is a copy constructor
|
||||
// if its first parameter is of type X&, const X&, volatile X& or
|
||||
@@ -779,6 +777,8 @@ CXXConstructorDecl::isCopyConstructor(ASTContext &Context,
|
||||
return false;
|
||||
|
||||
// Is it a reference to our class type?
|
||||
ASTContext &Context = getASTContext();
|
||||
|
||||
CanQualType PointeeType
|
||||
= Context.getCanonicalType(ParamRefType->getPointeeType());
|
||||
CanQualType ClassTy
|
||||
|
||||
@@ -508,7 +508,7 @@ CodeGenFunction::EmitCXXConstructorCall(const CXXConstructorDecl *D,
|
||||
llvm::Value *This,
|
||||
CallExpr::const_arg_iterator ArgBeg,
|
||||
CallExpr::const_arg_iterator ArgEnd) {
|
||||
if (D->isCopyConstructor(getContext())) {
|
||||
if (D->isCopyConstructor()) {
|
||||
const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(D->getDeclContext());
|
||||
if (ClassDecl->hasTrivialCopyConstructor()) {
|
||||
assert(!ClassDecl->hasUserDeclaredCopyConstructor() &&
|
||||
@@ -564,7 +564,7 @@ CodeGenFunction::EmitCXXConstructExpr(llvm::Value *Dest,
|
||||
getContext().getAsConstantArrayType(E->getType());
|
||||
// For a copy constructor, even if it is trivial, must fall thru so
|
||||
// its argument is code-gen'ed.
|
||||
if (!CD->isCopyConstructor(getContext())) {
|
||||
if (!CD->isCopyConstructor()) {
|
||||
QualType InitType = E->getType();
|
||||
if (Array)
|
||||
InitType = getContext().getBaseElementType(Array);
|
||||
|
||||
@@ -331,7 +331,7 @@ void CodeGenFunction::GenerateCode(GlobalDecl GD,
|
||||
if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(FD)) {
|
||||
// FIXME: For C++0x, we want to look for implicit *definitions* of
|
||||
// these special member functions, rather than implicit *declarations*.
|
||||
if (CD->isCopyConstructor(getContext())) {
|
||||
if (CD->isCopyConstructor()) {
|
||||
assert(!ClassDecl->hasUserDeclaredCopyConstructor() &&
|
||||
"Cannot synthesize a non-implicit copy constructor");
|
||||
SynthesizeCXXCopyConstructor(CD, GD.getCtorType(), Fn, Args);
|
||||
|
||||
@@ -800,7 +800,7 @@ static Sema::CXXSpecialMember getSpecialMember(ASTContext &Ctx,
|
||||
if (const CXXConstructorDecl *Ctor = dyn_cast<CXXConstructorDecl>(MD)) {
|
||||
if (Ctor->isDefaultConstructor())
|
||||
return Sema::CXXDefaultConstructor;
|
||||
if (Ctor->isCopyConstructor(Ctx))
|
||||
if (Ctor->isCopyConstructor())
|
||||
return Sema::CXXCopyConstructor;
|
||||
}
|
||||
|
||||
|
||||
@@ -3732,7 +3732,7 @@ void Sema::DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
|
||||
CXXConstructorDecl *CopyConstructor,
|
||||
unsigned TypeQuals) {
|
||||
assert((CopyConstructor->isImplicit() &&
|
||||
CopyConstructor->isCopyConstructor(Context, TypeQuals) &&
|
||||
CopyConstructor->isCopyConstructor(TypeQuals) &&
|
||||
!CopyConstructor->isUsed()) &&
|
||||
"DefineImplicitCopyConstructor - call it for implicit copy ctor");
|
||||
|
||||
@@ -3784,7 +3784,7 @@ Sema::BuildCXXConstructExpr(SourceLocation ConstructLoc, QualType DeclInitType,
|
||||
// all, even if the class copy constructor or destructor have side effects.
|
||||
|
||||
// FIXME: Is this enough?
|
||||
if (Constructor->isCopyConstructor(Context)) {
|
||||
if (Constructor->isCopyConstructor()) {
|
||||
Expr *E = ((Expr **)ExprArgs.get())[0];
|
||||
if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E))
|
||||
if (ICE->getCastKind() == CastExpr::CK_NoOp)
|
||||
|
||||
@@ -7011,7 +7011,7 @@ void Sema::MarkDeclarationReferenced(SourceLocation Loc, Decl *D) {
|
||||
if (!Constructor->isUsed())
|
||||
DefineImplicitDefaultConstructor(Loc, Constructor);
|
||||
} else if (Constructor->isImplicit() &&
|
||||
Constructor->isCopyConstructor(Context, TypeQuals)) {
|
||||
Constructor->isCopyConstructor(TypeQuals)) {
|
||||
if (!Constructor->isUsed())
|
||||
DefineImplicitCopyConstructor(Loc, Constructor, TypeQuals);
|
||||
}
|
||||
|
||||
@@ -3096,7 +3096,7 @@ static Sema::OwningExprResult CopyIfRequiredForEntity(Sema &S,
|
||||
// Find the constructor (which may be a template).
|
||||
CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(*Con);
|
||||
if (!Constructor || Constructor->isInvalidDecl() ||
|
||||
!Constructor->isCopyConstructor(S.Context))
|
||||
!Constructor->isCopyConstructor())
|
||||
continue;
|
||||
|
||||
S.AddOverloadCandidate(Constructor, &CurInitExpr, 1, CandidateSet);
|
||||
|
||||
@@ -451,7 +451,7 @@ Sema::TryImplicitConversion(Expr* From, QualType ToType,
|
||||
QualType FromCanon
|
||||
= Context.getCanonicalType(From->getType().getUnqualifiedType());
|
||||
QualType ToCanon = Context.getCanonicalType(ToType).getUnqualifiedType();
|
||||
if (Constructor->isCopyConstructor(Context) &&
|
||||
if (Constructor->isCopyConstructor() &&
|
||||
(FromCanon == ToCanon || IsDerivedFrom(FromCanon, ToCanon))) {
|
||||
// Turn this into a "standard" conversion sequence, so that it
|
||||
// gets ranked with standard conversion sequences.
|
||||
|
||||
Reference in New Issue
Block a user