mirror of https://github.com/microsoft/clang.git
[ObjC] The declarator for a block literal should be a definition
This change avoids the -Wstrict-prototypes warning for block literals with an empty argument list or without argument lists. rdar://15060615 Differential Revision: https://reviews.llvm.org/D28296 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@291231 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
95ab339152
commit
da684cc5fb
|
@ -2751,6 +2751,7 @@ void Parser::ParseBlockId(SourceLocation CaretLoc) {
|
|||
|
||||
// Parse the block-declarator.
|
||||
Declarator DeclaratorInfo(DS, Declarator::BlockLiteralContext);
|
||||
DeclaratorInfo.setFunctionDefinitionKind(FDK_Definition);
|
||||
ParseDeclarator(DeclaratorInfo);
|
||||
|
||||
MaybeParseGNUAttributes(DeclaratorInfo);
|
||||
|
@ -2789,6 +2790,7 @@ ExprResult Parser::ParseBlockLiteralExpression() {
|
|||
// Parse the return type if present.
|
||||
DeclSpec DS(AttrFactory);
|
||||
Declarator ParamInfo(DS, Declarator::BlockLiteralContext);
|
||||
ParamInfo.setFunctionDefinitionKind(FDK_Definition);
|
||||
// FIXME: Since the return type isn't actually parsed, it can't be used to
|
||||
// fill ParamInfo with an initial valid range, so do it manually.
|
||||
ParamInfo.SetSourceRange(SourceRange(Tok.getLocation(), Tok.getLocation()));
|
||||
|
|
|
@ -14,7 +14,8 @@ void foo() {
|
|||
void (^block)() = // expected-warning {{this function declaration is not a prototype}}
|
||||
^void(int arg) { // no warning
|
||||
};
|
||||
void (^block2)(void) = // no warning
|
||||
^void() { // expected-warning {{this function declaration is not a prototype}}
|
||||
void (^block2)(void) = ^void() { // no warning
|
||||
};
|
||||
void (^block3)(void) = ^ { // no warning
|
||||
};
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
return;
|
||||
};
|
||||
void (^simpleBlock5)() = ^ const void { //expected-error {{incompatible block pointer types initializing 'void (^)()' with an expression of type 'const void (^)(void)'}}
|
||||
return;
|
||||
return; // expected-warning@-1 {{function cannot return qualified void type 'const void'}}
|
||||
};
|
||||
void (^simpleBlock6)() = ^ const (void) { //expected-warning {{'const' qualifier on omitted return type '<dependent type>' has no effect}}
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue