1// RUN: %clang_cc1 -fsyntax-only -fobjc-arc -verify -Wno-objc-root-class %s
2// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class -DNOARC %s
3#ifdef NOARC
4// expected-no-diagnostics
5#endif
6
7@interface RetainableArray {
8  id flexible[];
9#ifndef NOARC
10  // expected-error@-2 {{ARC forbids flexible array members with retainable object type}}
11#endif
12}
13@end
14@implementation RetainableArray
15@end
16
17// Emit diagnostic only if have @implementation.
18@interface RetainableArrayWithoutImpl {
19  id flexible[];
20}
21@end
22
23// With ARC flexible array member objects can be only __unsafe_unretained
24@interface UnsafeUnretainedArray {
25  __unsafe_unretained id flexible[];
26}
27@end
28@implementation UnsafeUnretainedArray
29@end
30
31@interface NotObjCLifetimeTypeArray {
32  char flexible[];
33}
34@end
35@implementation NotObjCLifetimeTypeArray
36@end
37