mirror of https://github.com/microsoft/clang.git
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:
parent
38dbad233b
commit
0c7102f070
|
@ -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
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue