diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-07-05 16:13:20 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-07-05 16:13:20 +0000 |
commit | 1fe12c9ebae193bcebc995cb2f9d2d08f745f89b (patch) | |
tree | 30496795c21740fd5c4087dceaee4d4a1790bb9e | |
parent | ea53901dc974aaa7a62b8be73fbefb38878d16b3 (diff) | |
download | bcm5719-llvm-1fe12c9ebae193bcebc995cb2f9d2d08f745f89b.tar.gz bcm5719-llvm-1fe12c9ebae193bcebc995cb2f9d2d08f745f89b.zip |
ActOnCXXConditionDeclaration should take into account that
ActOnDeclarator can return NULL. Fixes PR10270, from Hans Wennborg!
llvm-svn: 134416
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 5 | ||||
-rw-r--r-- | clang/test/SemaCXX/crashes.cpp | 9 |
2 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index ac51138b91d..368fd9259e3 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -8914,10 +8914,13 @@ DeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) { "Parser allowed 'typedef' as storage class of condition decl."); Decl *Dcl = ActOnDeclarator(S, D); + if (!Dcl) + return true; + if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function. Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type) << D.getSourceRange(); - return DeclResult(); + return true; } return Dcl; diff --git a/clang/test/SemaCXX/crashes.cpp b/clang/test/SemaCXX/crashes.cpp index c75b0401fed..b77248ef410 100644 --- a/clang/test/SemaCXX/crashes.cpp +++ b/clang/test/SemaCXX/crashes.cpp @@ -95,3 +95,12 @@ namespace PR9026 { Write(x); } } + +namespace PR10270 { + template<typename T> class C; + template<typename T> void f() { + if (C<T> == 1) // expected-error{{expected unqualified-id}} \ + // expected-error{{invalid '==' at end of declaration}} + return; + } +} |