diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-09-11 22:27:50 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-09-11 22:27:50 +0000 |
commit | 4f213d3d7427c267776328c419044ed94783241f (patch) | |
tree | 1fd6b7acc48f926a1aba21c086c479f05c9d2d9c /lib | |
parent | 8a9f3fd8bb14a64a31a29bf5cf5376b643218b71 (diff) |
No need to build the visible conversionfunction list for root class.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81583 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/DeclCXX.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index e878a3df28..2149005cde 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -288,11 +288,16 @@ void CXXRecordDecl::addedAssignmentOperator(ASTContext &Context, OverloadedFunctionDecl * CXXRecordDecl::getVisibleConversionFunctions(ASTContext &Context, CXXRecordDecl *RD) { - // If visible conversion list is already evaluated, return it. - if (RD == this && - VisibleConversions.function_begin() != VisibleConversions.function_end()) - return &VisibleConversions; - + if (RD == this) { + // If root class, all conversions are visible. + if (RD->bases_begin() == RD->bases_end()) + return &Conversions; + // If visible conversion list is already evaluated, return it. + if (VisibleConversions.function_begin() + != VisibleConversions.function_end()) + return &VisibleConversions; + } + QualType ClassType = Context.getTypeDeclType(this); if (const RecordType *Record = ClassType->getAs<RecordType>()) { OverloadedFunctionDecl *Conversions |