diff options
-rw-r--r-- | lib/Parse/ParseObjc.cpp | 9 | ||||
-rw-r--r-- | test/Parser/objcxx11-initialized-temps.mm | 38 |
2 files changed, 46 insertions, 1 deletions
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index 4adba4f5c5..23afa4ff3d 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -2501,7 +2501,14 @@ Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc, return ExprError(); } - ExprResult Res(ParseAssignmentExpression()); + ExprResult Expr; + if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) { + Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists); + Expr = ParseBraceInitializer(); + } else + Expr = ParseAssignmentExpression(); + + ExprResult Res(Expr); if (Res.isInvalid()) { // We must manually skip to a ']', otherwise the expression skipper will // stop at the ']' when it skips to the ';'. We want it to skip beyond diff --git a/test/Parser/objcxx11-initialized-temps.mm b/test/Parser/objcxx11-initialized-temps.mm new file mode 100644 index 0000000000..96f19fe6a5 --- /dev/null +++ b/test/Parser/objcxx11-initialized-temps.mm @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s +// expected-no-diagnostics +// rdar://12788429 + +struct CGPoint { + double x; + double y; +}; +typedef struct CGPoint CGPoint; + +struct CGSize { + double width; + double height; +}; +typedef struct CGSize CGSize; + +struct CGRect { + CGPoint origin; + CGSize size; +}; +typedef struct CGRect CGRect; + +typedef CGRect NSRect; + +void HappySetFrame(NSRect frame) {} + +__attribute__((objc_root_class)) +@interface NSObject @end + +@implementation NSObject +- (void) sadSetFrame: (NSRect)frame {} + +- (void) nothing +{ + HappySetFrame({{0,0}, {13,14}}); + [self sadSetFrame: {{0,0}, {13,14}}]; +} +@end |