]> granicus.if.org Git - clang/commitdiff
Look at incomplete FunctionTemplateDecls in order to determine whether
authorDaniel Jasper <djasper@google.com>
Thu, 14 Jun 2012 20:56:06 +0000 (20:56 +0000)
committerDaniel Jasper <djasper@google.com>
Thu, 14 Jun 2012 20:56:06 +0000 (20:56 +0000)
a CXXRecordDecl is complete. Fixes Bug 13086.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158469 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/Sema.cpp
test/SemaCXX/warn-unused-member.cpp

index e0d405d175f973d9d5710885d3efa9138415cd64..39338f983e5ee17d1920d6c5f0c26939f40e05be 100644 (file)
@@ -444,6 +444,8 @@ static bool MethodsAndNestedClassesComplete(const CXXRecordDecl *RD,
        I != E && Complete; ++I) {
     if (const CXXMethodDecl *M = dyn_cast<CXXMethodDecl>(*I))
       Complete = M->isDefined() || (M->isPure() && !isa<CXXDestructorDecl>(M));
+    else if (const FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(*I))
+      Complete = F->getTemplatedDecl()->isDefined();
     else if (const CXXRecordDecl *R = dyn_cast<CXXRecordDecl>(*I)) {
       if (R->isInjectedClassName())
         continue;
index 00de8a97aca8ace8084cc3dc68b2f39219a9951a..9ec9df66ec7972f097a09d8da2ac9174bd96f1d4 100644 (file)
@@ -142,6 +142,13 @@ class EverythingUsed {
   int by_initializer_;
 };
 
+namespace templates {
+class B {
+  template <typename T> void f(T t);
+  int a;
+};
+}  // namespace templates
+
 namespace mutual_friends {
 // Undefined methods make mutual friends undefined.
 class A {