diff options
-rw-r--r-- | lib/Parse/ParseDecl.cpp | 11 | ||||
-rw-r--r-- | test/SemaObjC/severe-syntax-error.m | 23 |
2 files changed, 29 insertions, 5 deletions
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 032326cea7..1c7c45e2bd 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -1150,11 +1150,12 @@ Parser::DeclGroupPtrTy Parser::ParseDeclGroup(ParsingDeclSpec &DS, MaybeParseGNUAttributes(D); ParseDeclarator(D); - - Decl *ThisDecl = ParseDeclarationAfterDeclarator(D); - D.complete(ThisDecl); - if (ThisDecl) - DeclsInGroup.push_back(ThisDecl); + if (!D.isInvalidType()) { + Decl *ThisDecl = ParseDeclarationAfterDeclarator(D); + D.complete(ThisDecl); + if (ThisDecl) + DeclsInGroup.push_back(ThisDecl); + } } if (DeclEnd) diff --git a/test/SemaObjC/severe-syntax-error.m b/test/SemaObjC/severe-syntax-error.m new file mode 100644 index 0000000000..626cd98a95 --- /dev/null +++ b/test/SemaObjC/severe-syntax-error.m @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// rdar://10633434 + +@interface testClass +@end + +@class NSArray; + +@implementation testClass + +static NSArray* prefixArray[] = @"BEGIN:", @"END:", @"VERSION:", @"N:", @"FN:", @"TEL;", @"TEL:", nil; // expected-error {{array initializer must be an initializer list}} \ + // expected-error {{expected identifier or '('}} \ + // expected-error {{expected ';' after top level declarator}} + +static NSString* prefixArray1[] = @"BEGIN:", @"END:", @"VERSION:", @"N:", @"FN:", @"TEL;", @"TEL:", nil; // expected-error {{unknown type name 'NSString'}} \ + // expected-error {{expected identifier or '('}} \ + // expected-error {{expected ';' after top level declarator}} + +static char* cArray[] = "BEGIN:", "END"; // expected-error {{array initializer must be an initializer list}} \ + // expected-error {{expected identifier or '('}} \ + // expected-error {{expected ';' after top level declarator}} + +@end |