[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / SemaObjCXX / references.mm
blobfc5f712fba8fad30db8841e3f197d0a5fdb654f0
1 // RUN: %clang_cc1 -verify -o - %s
3 __attribute__((objc_root_class))
4 @interface Root @end
6 // Test reference binding.
8 typedef struct {
9   int f0;
10   int f1;
11 } T;
13 @interface A : Root
14 @property (assign) T p0;
15 @property (assign) T& p1; 
16 @end
18 int f0(const T& t) {
19   return t.f0;
22 int f1(A *a) {
23   return f0(a.p0);
26 int f2(A *a) {
27   return f0(a.p1);      
30 // PR7740
31 @class NSString;
33 void f3(id);
34 void f4(NSString &tmpstr) {
35   f3(&tmpstr);
38 // PR7741
39 @protocol P1 @end
40 @protocol P2 @end
41 @protocol P3 @end
42 @interface foo<P1> {} @end
43 @interface bar : foo <P1, P2, P3> {} @end
44 typedef bar baz;
46 struct ToBar {
47   operator bar&() const;
50 void f5(foo&);
51 void f5b(foo<P1>&);
52 void f5c(foo<P2>&);
53 void f5d(foo<P3>&);
54 void f6(baz* x) { 
55   f5(*x); 
56   f5b(*x); 
57   f5c(*x); 
58   f5d(*x);
59   (void)((foo&)*x);
60   f5(ToBar());
61   f5b(ToBar());
62   f5c(ToBar());
63   f5d(ToBar());
64   (void)((foo&)ToBar());
67 @interface B : Root @end
68 @implementation B {
69   unsigned bf : 4; // expected-note {{declared here}}
72 - (void) foo {
73   unsigned &i = bf; // expected-error {{non-const reference cannot bind to bit-field 'bf'}}
75 @end