summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-07-05 16:13:20 +0000
committerDouglas Gregor <dgregor@apple.com>2011-07-05 16:13:20 +0000
commit1fe12c9ebae193bcebc995cb2f9d2d08f745f89b (patch)
tree30496795c21740fd5c4087dceaee4d4a1790bb9e
parentea53901dc974aaa7a62b8be73fbefb38878d16b3 (diff)
downloadbcm5719-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.cpp5
-rw-r--r--clang/test/SemaCXX/crashes.cpp9
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;
+ }
+}
OpenPOWER on IntegriCloud