summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-12-09 03:44:46 +0000
committerAnders Carlsson <andersca@mac.com>2009-12-09 03:44:46 +0000
commita038825b1c2cbb7f8448f591927a7db76393dd0e (patch)
treedf643604e20fd762cda25b61241ba1b08479e1c7
parentaff69af918e840a5f239533dee4dbde51d9d5c2c (diff)
downloadbcm5719-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.cpp18
-rw-r--r--clang/test/SemaCXX/warn-missing-prototypes.cpp13
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>();
OpenPOWER on IntegriCloud