aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-12-30 21:42:26 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-12-30 21:42:26 +0000
commit87b8127c2c65c8229e5b874c10a33f1ce13493ad (patch)
treef83ce7f12f633a3adc8bb452bd4969b815688844
parent1f94f2b484dc74e09fe31dd5ea9d3f715be6c133 (diff)
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
-rw-r--r--lib/Sema/Sema.cpp3
-rw-r--r--test/SemaCXX/warn-unused-filescoped.cpp14
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp
index 0c5e8db1aa..a639d3bc46 100644
--- a/lib/Sema/Sema.cpp
+++ b/lib/Sema/Sema.cpp
@@ -363,6 +363,9 @@ static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) {
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 1e0802e42d..4cb38d997b 100644
--- a/test/SemaCXX/warn-unused-filescoped.cpp
+++ b/test/SemaCXX/warn-unused-filescoped.cpp
@@ -118,3 +118,17 @@ namespace unused {
}
} 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();
+ };
+}