diff options
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 7 | 
1 files changed, 7 insertions, 0 deletions
| diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 8630e73ceea..76a2f4f612f 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -2326,6 +2326,10 @@ bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,    CXXFinalOverriderMap FinalOverriders;    RD->getFinalOverriders(FinalOverriders); +  // Keep a set of seen pure methods so we won't diagnose the same method +  // more than once. +  llvm::SmallPtrSet<const CXXMethodDecl *, 8> SeenPureMethods; +      for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(),                                      MEnd = FinalOverriders.end();         M != MEnd;  @@ -2345,6 +2349,9 @@ bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,        if (!SO->second.front().Method->isPure())          continue; +      if (!SeenPureMethods.insert(SO->second.front().Method)) +        continue; +        Diag(SO->second.front().Method->getLocation(),              diag::note_pure_virtual_function)           << SO->second.front().Method->getDeclName(); | 

