Obj-C++11 parser: handle a fall out of delayed

c-function parsing when a declaration with
C++0x braced-init-list is inside an @implementation.

llvm-svn: 159693
This commit is contained in:
Fariborz Jahanian 2012-07-03 23:22:13 +00:00
parent 017591ab45
commit 8be1ecd615
3 changed files with 44 additions and 2 deletions

View File

@ -1614,7 +1614,7 @@ Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D,
/*DirectInit=*/true, TypeContainsAuto);
}
} else if (getLangOpts().CPlusPlus0x && Tok.is(tok::l_brace) &&
!CurParsedObjCImpl) {
(!CurParsedObjCImpl || !D.isFunctionDeclarator())) {
// Parse C++0x braced-init-list.
Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);

View File

@ -1,6 +1,5 @@
// RUN: %clang_cc1 -fsyntax-only -Werror -verify -Wno-objc-root-class %s
// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -Werror -verify -Wno-objc-root-class %s
// RUN: %clang_cc1 -x objective-c++ -std=c++11 -fsyntax-only -Werror -verify -Wno-objc-root-class %s
// rdar://10387088
@interface MyClass

View File

@ -0,0 +1,43 @@
// RUN: %clang_cc1 -x objective-c++ -std=c++11 -fsyntax-only -Werror -verify -Wno-objc-root-class %s
// rdar://10387088
struct X {
X();
};
@interface MyClass
- (void)someMethod;
@end
@implementation MyClass
- (void)someMethod {
[self privateMethod]; // clang already does not warn here
}
int bar(MyClass * myObject) {
[myObject privateMethod];
return gorfbar(myObject);
}
- (void)privateMethod { }
int gorfbar(MyClass * myObject) {
[myObject privateMethod];
[myObject privateMethod1];
return getMe + bar(myObject);
}
- (void)privateMethod1 {
getMe = getMe+1;
}
static int getMe;
static int test() {
return 0;
}
int x{17};
X::X() = default;
@end