diff options
| author | Richard Trieu <rtrieu@google.com> | 2014-01-04 01:57:42 +0000 |
|---|---|---|
| committer | Richard Trieu <rtrieu@google.com> | 2014-01-04 01:57:42 +0000 |
| commit | 658eb68e82e665132e15a96a85384974de20ceef (patch) | |
| tree | 185a165c8897086352be0f99b3166c423d8ddeac /clang/lib/Sema/AnalysisBasedWarnings.cpp | |
| parent | 83f1149b30d9131c8f8b26efafd223e119eb4891 (diff) | |
| download | bcm5719-llvm-658eb68e82e665132e15a96a85384974de20ceef.tar.gz bcm5719-llvm-658eb68e82e665132e15a96a85384974de20ceef.zip | |
Ignore qualified templated functions for -Winfinite-recursion. This treats
functions like Foo<5>::run() the same way as run<5>() for this warning.
llvm-svn: 198470
Diffstat (limited to 'clang/lib/Sema/AnalysisBasedWarnings.cpp')
| -rw-r--r-- | clang/lib/Sema/AnalysisBasedWarnings.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp index 57c0ac311cd..72f8ee1d29d 100644 --- a/clang/lib/Sema/AnalysisBasedWarnings.cpp +++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp @@ -116,6 +116,18 @@ static void checkForFunctionCall(Sema &S, const FunctionDecl *FD, const CallExpr *CE = dyn_cast<CallExpr>(I->getAs<CFGStmt>()->getStmt()); if (CE && CE->getCalleeDecl() && CE->getCalleeDecl()->getCanonicalDecl() == FD) { + + // Skip function calls which are qualified with a templated class. + if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>( + CE->getCallee()->IgnoreParenImpCasts())) { + if (NestedNameSpecifier *NNS = DRE->getQualifier()) { + if (NNS->getKind() == NestedNameSpecifier::TypeSpec && + isa<TemplateSpecializationType>(NNS->getAsType())) { + continue; + } + } + } + if (const CXXMemberCallExpr *MCE = dyn_cast<CXXMemberCallExpr>(CE)) { if (isa<CXXThisExpr>(MCE->getImplicitObjectArgument()) || !MCE->getMethodDecl()->isVirtual()) { |

