xref: /aosp_15_r20/external/clang/test/SemaObjCXX/pointer-to-objc-pointer-conv.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li// expected-no-diagnostics
3*67e74705SXin Li
4*67e74705SXin Li// REQUIRES: LP64
5*67e74705SXin Li
6*67e74705SXin Li@interface G
7*67e74705SXin Li@end
8*67e74705SXin Li
9*67e74705SXin Li@interface F
10*67e74705SXin Li- (void)bar:(id *)objects;
11*67e74705SXin Li- (void)foo:(G**)objects;
12*67e74705SXin Li@end
13*67e74705SXin Li
14*67e74705SXin Li
15*67e74705SXin Livoid a() {
16*67e74705SXin Li	F *b;
17*67e74705SXin Li	G **keys;
18*67e74705SXin Li	[b bar:keys];
19*67e74705SXin Li
20*67e74705SXin Li	id *PID;
21*67e74705SXin Li	[b foo:PID];
22*67e74705SXin Li
23*67e74705SXin Li}
24*67e74705SXin Li
25*67e74705SXin Li
26*67e74705SXin Li// pr7936
27*67e74705SXin Li@interface I1 @end
28*67e74705SXin Li
29*67e74705SXin Liclass Wrapper {
30*67e74705SXin Lipublic:
31*67e74705SXin Li  operator id() const { return (id)_value; }
32*67e74705SXin Li  operator Class() const { return (Class)_value; }
33*67e74705SXin Li  operator I1*() const { return (I1*)_value; }
34*67e74705SXin Li
35*67e74705SXin Li  bool Compare(id obj) { return *this == obj; }
36*67e74705SXin Li  bool CompareClass(Class obj) { return *this == obj; }
37*67e74705SXin Li  bool CompareI1(I1* obj) { return *this == obj; }
38*67e74705SXin Li
39*67e74705SXin Li  Wrapper &operator*();
40*67e74705SXin Li  Wrapper &operator[](int);
41*67e74705SXin Li  Wrapper& operator->*(int);
42*67e74705SXin Li
43*67e74705SXin Liprivate:
44*67e74705SXin Li  long _value;
45*67e74705SXin Li};
46*67e74705SXin Li
47*67e74705SXin Livoid f() {
48*67e74705SXin Li  Wrapper w;
49*67e74705SXin Li  w[0];
50*67e74705SXin Li  *w;
51*67e74705SXin Li  w->*(0);
52*67e74705SXin Li}
53