diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 5a7fc7e72d06d0df46103578f227f7ec15ca921e..5e3bfe77e7ddb0d706a725b0296febfbe8d7c638 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -1244,7 +1244,7 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS, DiagID, getLang()); break; case tok::kw_auto: - if (getLang().CPlusPlus0x) + if (getLang().CPlusPlus0x || getLang().ObjC1) isInvalid = DS.SetTypeSpecType(DeclSpec::TST_auto, Loc, PrevSpec, DiagID); else diff --git a/clang/test/SemaObjC/auto-objective-c.m b/clang/test/SemaObjC/auto-objective-c.m new file mode 100644 index 0000000000000000000000000000000000000000..e73f899ac6b3922bec8fac2959b2435e055c6836 --- /dev/null +++ b/clang/test/SemaObjC/auto-objective-c.m @@ -0,0 +1,24 @@ +// RUN: %clang_cc1 -x objective-c -fblocks -fsyntax-only -verify %s + +@interface I +{ + id pi; +} +- (id) Meth; +@end + + +typedef int (^P) (int x); + +@implementation I +- (id) Meth { + auto p = [pi Meth]; + return p; +} + +- (P) bfunc { + auto my_block = ^int (int x) {return x; }; + my_block(1); + return my_block; +} +@end