diff options
Diffstat (limited to 'clang/test/SemaObjCXX/references.mm')
-rw-r--r-- | clang/test/SemaObjCXX/references.mm | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/clang/test/SemaObjCXX/references.mm b/clang/test/SemaObjCXX/references.mm new file mode 100644 index 0000000..3a52200 --- /dev/null +++ b/clang/test/SemaObjCXX/references.mm @@ -0,0 +1,62 @@ +// RUN: %clang_cc1 -verify -emit-llvm -o - %s + +// Test reference binding. + +typedef struct { + int f0; + int f1; +} T; + +@interface A +@property (assign) T p0; +@property (assign) T& p1; +@end + +int f0(const T& t) { + return t.f0; +} + +int f1(A *a) { + return f0(a.p0); +} + +int f2(A *a) { + return f0(a.p1); +} + +// PR7740 +@class NSString; + +void f3(id); +void f4(NSString &tmpstr) { + f3(&tmpstr); +} + +// PR7741 +@protocol P1 @end +@protocol P2 @end +@protocol P3 @end +@interface foo<P1> {} @end +@interface bar : foo <P1, P2, P3> {} @end +typedef bar baz; + +struct ToBar { + operator bar&() const; +}; + +void f5(foo&); +void f5b(foo<P1>&); +void f5c(foo<P2>&); +void f5d(foo<P3>&); +void f6(baz* x) { + f5(*x); + f5b(*x); + f5c(*x); + f5d(*x); + (void)((foo&)*x); + f5(ToBar()); + f5b(ToBar()); + f5c(ToBar()); + f5d(ToBar()); + (void)((foo&)ToBar()); +} |