Don't warn on unused member functions that are extern because of a typedef.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171267 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp
index 0c5e8db..a639d3b 100644
--- a/lib/Sema/Sema.cpp
+++ b/lib/Sema/Sema.cpp
@@ -363,6 +363,9 @@
       return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck);
   }
 
+  if (D->getLinkage() == ExternalLinkage)
+    return true;
+
   return false;
 }
 
diff --git a/test/SemaCXX/warn-unused-filescoped.cpp b/test/SemaCXX/warn-unused-filescoped.cpp
index 1e0802e..4cb38d9 100644
--- a/test/SemaCXX/warn-unused-filescoped.cpp
+++ b/test/SemaCXX/warn-unused-filescoped.cpp
@@ -118,3 +118,17 @@
     }
   } x; // expected-warning {{unused variable}}
 }
+
+namespace test6 {
+  typedef struct {
+    void bar();
+  } A;
+
+  typedef struct {
+    void bar();  // expected-warning {{unused member function 'bar'}}
+  } *B;
+
+  struct C {
+    void bar();
+  };
+}