// 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()); | |
} |