summaryrefslogtreecommitdiff
path: root/clang/test/SemaObjCXX/pointer-to-objc-pointer-conv.mm
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/SemaObjCXX/pointer-to-objc-pointer-conv.mm')
-rw-r--r--clang/test/SemaObjCXX/pointer-to-objc-pointer-conv.mm49
1 files changed, 49 insertions, 0 deletions
diff --git a/clang/test/SemaObjCXX/pointer-to-objc-pointer-conv.mm b/clang/test/SemaObjCXX/pointer-to-objc-pointer-conv.mm
new file mode 100644
index 0000000..d0f8404
--- /dev/null
+++ b/clang/test/SemaObjCXX/pointer-to-objc-pointer-conv.mm
@@ -0,0 +1,49 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+@interface G
+@end
+
+@interface F
+- (void)bar:(id *)objects;
+- (void)foo:(G**)objects;
+@end
+
+
+void a() {
+ F *b;
+ G **keys;
+ [b bar:keys];
+
+ id *PID;
+ [b foo:PID];
+
+}
+
+
+// pr7936
+@interface I1 @end
+
+class Wrapper {
+public:
+ operator id() const { return (id)_value; }
+ operator Class() const { return (Class)_value; }
+ operator I1*() const { return (I1*)_value; }
+
+ bool Compare(id obj) { return *this == obj; }
+ bool CompareClass(Class obj) { return *this == obj; }
+ bool CompareI1(I1* obj) { return *this == obj; }
+
+ Wrapper &operator*();
+ Wrapper &operator[](int);
+ Wrapper& operator->*(int);
+
+private:
+ long _value;
+};
+
+void f() {
+ Wrapper w;
+ w[0];
+ *w;
+ w->*(0);
+}