Objective-C++: Enable passing of modern C++11 style

initialized temporaries to objc++ methods. 
// rdar://12788429


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179818 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Fariborz Jahanian 2013-04-18 23:43:21 +00:00
parent 38dbad233b
commit 0c7102f070
2 changed files with 46 additions and 1 deletions

View File

@ -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

View File

@ -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