summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-04-27 16:20:13 +0000
committerDouglas Gregor <dgregor@apple.com>2010-04-27 16:20:13 +0000
commit19defcd6f5183c554014732ffa7800da0e5d1ae9 (patch)
treea16d8b3c5635ae1b226f5b6440a5af8c602a609c /clang
parenta9f7c3263e855e140f2c4b3932e9824ec35006f1 (diff)
downloadbcm5719-llvm-19defcd6f5183c554014732ffa7800da0e5d1ae9.tar.gz
bcm5719-llvm-19defcd6f5183c554014732ffa7800da0e5d1ae9.zip
Don't look into incomplete types when trying to warn about unused
variables. Fixes PR6948. llvm-svn: 102436
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp5
-rw-r--r--clang/test/SemaCXX/warn-unused-variables.cpp8
2 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 3f309bb6ada..d9696d9ed59 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -543,6 +543,11 @@ static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) {
return false;
}
+ // If we failed to complete the type for some reason, don't
+ // diagnose the variable.
+ if (Ty->isIncompleteType())
+ return false;
+
if (const TagType *TT = Ty->getAs<TagType>()) {
const TagDecl *Tag = TT->getDecl();
if (Tag->hasAttr<UnusedAttr>())
diff --git a/clang/test/SemaCXX/warn-unused-variables.cpp b/clang/test/SemaCXX/warn-unused-variables.cpp
index 3b5349a5ce1..5ef7e7002f6 100644
--- a/clang/test/SemaCXX/warn-unused-variables.cpp
+++ b/clang/test/SemaCXX/warn-unused-variables.cpp
@@ -51,3 +51,11 @@ void test_dependent_init(T *p) {
X0<int> i(p);
(void)i;
}
+
+namespace PR6948 {
+ template<typename T> class X;
+
+ void f() {
+ X<char> str (read_from_file()); // expected-error{{use of undeclared identifier 'read_from_file'}}
+ }
+}
OpenPOWER on IntegriCloud