diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-04-27 16:20:13 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-04-27 16:20:13 +0000 |
| commit | 19defcd6f5183c554014732ffa7800da0e5d1ae9 (patch) | |
| tree | a16d8b3c5635ae1b226f5b6440a5af8c602a609c /clang | |
| parent | a9f7c3263e855e140f2c4b3932e9824ec35006f1 (diff) | |
| download | bcm5719-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.cpp | 5 | ||||
| -rw-r--r-- | clang/test/SemaCXX/warn-unused-variables.cpp | 8 |
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'}} + } +} |

