[PowerPC] Collect some CallLowering arguments into a struct. [NFC]
[llvm-project.git] / clang / test / SemaObjC / arc-unavailable-for-weakref.m
blobc59616819930b494f582f86810d645a19eb915bb
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fsyntax-only -fobjc-arc -verify -Wno-objc-root-class %s
2 // RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fsyntax-only -fobjc-weak -verify -Wno-objc-root-class %s
3 // rdar://9693477
5 __attribute__((objc_arc_weak_reference_unavailable))
6 @interface NSOptOut1072  // expected-note {{class is declared here}}
7 @end
9 @interface sub : NSOptOut1072 @end // expected-note 2 {{class is declared here}}
11 int main() {
12   __weak sub *w2; // expected-error {{class is incompatible with __weak references}}
14   __weak NSOptOut1072 *ns1; // expected-error {{class is incompatible with __weak references}}
16   id obj;
18   ns1 = (__weak sub *)obj; // expected-error {{assignment of a weak-unavailable object to a __weak object}} \
19                            // expected-error {{class is incompatible with __weak references}} \
20                            // expected-error {{explicit ownership qualifier on cast result has no effect}}
23 // rdar://9732636
24 __attribute__((objc_arc_weak_reference_unavailable))
25 @interface NOWEAK
26 + (id) new;
27 @end
29 NOWEAK * Test1() {
30   NOWEAK * strong1 = [NOWEAK new];
31   __weak id weak1;
32   weak1 = strong1; // expected-error {{assignment of a weak-unavailable object to a __weak object}}
34   __weak id weak2 = strong1; // expected-error {{assignment of a weak-unavailable object to a __weak object}}
35   return (__weak id)strong1; // expected-error {{cast of weak-unavailable object of type 'NOWEAK *' to a __weak object of type '__weak id'}} \
36                              // expected-error {{explicit ownership qualifier on cast result has no effect}}
39 @protocol P @end
40 @protocol P1 @end
42 NOWEAK<P, P1> * Test2() {
43   NOWEAK<P, P1> * strong1 = 0;
44   __weak id<P> weak1;
45   weak1 = strong1; // expected-error {{assignment of a weak-unavailable object to a __weak object}}
47   __weak id<P> weak2 = strong1; // expected-error {{assignment of a weak-unavailable object to a __weak object}}
48   return (__weak id<P>)strong1; // expected-error {{cast of weak-unavailable object of type 'NOWEAK<P,P1> *' to a __weak object of type '__weak id<P>'}} \
49                                 // expected-error {{explicit ownership qualifier on cast result has no effect}}
52 // rdar://10535245
53 __attribute__((objc_arc_weak_reference_unavailable))
54 @interface NSFont
55 @end
57 @interface I
60 @property (weak) NSFont *font; // expected-error {{synthesizing __weak instance variable of type 'NSFont *', which does not support weak references}}
61 @end
63 @implementation I // expected-note {{when implemented by class I}}
64 @synthesize font = _font;
65 @end
67 // rdar://13676793
68 @protocol MyProtocol
69 @property (weak) NSFont *font; // expected-error {{synthesizing __weak instance variable of type 'NSFont *', which does not support weak references}}
70 @end
72 @interface I1 <MyProtocol>
73 @end
75 @implementation I1 // expected-note {{when implemented by class I1}}
76 @synthesize font = _font;
77 @end
79 @interface Super
80 @property (weak) NSFont *font;  // expected-error {{synthesizing __weak instance variable of type 'NSFont *', which does not support weak references}}
81 @end
84 @interface I2 : Super
85 @end
87 @implementation I2 // expected-note {{when implemented by class I2}}
88 @synthesize font = _font;
89 @end
91 __attribute__((objc_arc_weak_reference_unavailable(1))) // expected-error {{'objc_arc_weak_reference_unavailable' attribute takes no arguments}}
92 @interface I3
93 @end
95 int I4 __attribute__((objc_arc_weak_reference_unavailable)); // expected-error {{'objc_arc_weak_reference_unavailable' attribute only applies to Objective-C interfaces}}