diff options
author | Anders Carlsson <andersca@mac.com> | 2009-12-09 03:44:46 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-12-09 03:44:46 +0000 |
commit | a038825b1c2cbb7f8448f591927a7db76393dd0e (patch) | |
tree | df643604e20fd762cda25b61241ba1b08479e1c7 | |
parent | aff69af918e840a5f239533dee4dbde51d9d5c2c (diff) | |
download | bcm5719-llvm-a038825b1c2cbb7f8448f591927a7db76393dd0e.tar.gz bcm5719-llvm-a038825b1c2cbb7f8448f591927a7db76393dd0e.zip |
Don't warn about function templates or function template specializations.
llvm-svn: 90943
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 18 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-missing-prototypes.cpp | 13 |
2 files changed, 23 insertions, 8 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 392360f5aa8..617adfe3630 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -3998,23 +3998,31 @@ static bool ShouldWarnAboutMissingPrototype(const FunctionDecl *FD) { // Don't warn about invalid declarations. if (FD->isInvalidDecl()) return false; - + // Or declarations that aren't global. if (!FD->isGlobal()) return false; - + // Don't warn about C++ member functions. if (isa<CXXMethodDecl>(FD)) return false; - + // Don't warn about 'main'. if (FD->isMain()) return false; - + // Don't warn about inline functions. if (FD->isInlineSpecified()) return false; - + + // Don't warn about function templates. + if (FD->getDescribedFunctionTemplate()) + return false; + + // Don't warn about function template specializations. + if (FD->isFunctionTemplateSpecialization()) + return false; + bool MissingPrototype = true; for (const FunctionDecl *Prev = FD->getPreviousDeclaration(); Prev; Prev = Prev->getPreviousDeclaration()) { diff --git a/clang/test/SemaCXX/warn-missing-prototypes.cpp b/clang/test/SemaCXX/warn-missing-prototypes.cpp index 481547036e4..079a8372522 100644 --- a/clang/test/SemaCXX/warn-missing-prototypes.cpp +++ b/clang/test/SemaCXX/warn-missing-prototypes.cpp @@ -7,13 +7,20 @@ namespace NS { } namespace { - // Should not warn about anonymous namespaces + // Don't warn about functions in anonymous namespaces. void f() { } } struct A { - // Should not warn about member functions. + // Don't warn about member functions. void f() { } }; -inline void g() { }
\ No newline at end of file +// Don't warn about inline functions. +inline void g() { } + +// Don't warn about function templates. +template<typename> void h() { } + +// Don't warn when instantiating function templates. +template void h<int>(); |