These usually apply to the return type. At one point this was necessary to
get some of them to apply to the entire block, but it appears that's working
anyway (see block-return.c).
rdar://problem/
20468034
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240189
91177308-0d34-0410-b5e6-
96231b3b80d8
Declarator DeclaratorInfo(DS, Declarator::BlockLiteralContext);
ParseDeclarator(DeclaratorInfo);
- // We do this for: ^ __attribute__((noreturn)) {, as DS has the attributes.
- DeclaratorInfo.takeAttributes(DS.getAttributes(), SourceLocation());
-
MaybeParseGNUAttributes(DeclaratorInfo);
// Inform sema that we are starting a block.
ip = foo.d; // expected-warning{{from 'MultiProp * __nullable'}}
ip = foo.e; // expected-error{{incompatible type 'MultiProp *(^ __nullable)(int)'}}
}
+
+void testBlockLiterals() {
+ (void)(^id(void) { return 0; });
+ (void)(^id __nullable (void) { return 0; });
+ (void)(^ __nullable id(void) { return 0; });
+
+ int *x = (^ __nullable id(void) { return 0; })(); // expected-warning{{incompatible pointer types initializing 'int *' with an expression of type 'id __nullable'}}
+}