summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CodeGenObjCXX/catch-id-type.mm2
-rw-r--r--clang/test/CodeGenObjCXX/mangle.mm20
-rw-r--r--clang/test/CodeGenObjCXX/rtti.mm8
-rw-r--r--clang/test/SemaObjCXX/overload-1.mm25
-rw-r--r--clang/test/SemaObjCXX/overload.mm17
5 files changed, 32 insertions, 40 deletions
diff --git a/clang/test/CodeGenObjCXX/catch-id-type.mm b/clang/test/CodeGenObjCXX/catch-id-type.mm
index 2d6cccc0f12..0a2b940ff16 100644
--- a/clang/test/CodeGenObjCXX/catch-id-type.mm
+++ b/clang/test/CodeGenObjCXX/catch-id-type.mm
@@ -31,7 +31,7 @@ id FUNC() {
catch( id error )
{
// CHECK: landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
- // CHECK-NEXT: catch i8* bitcast ({ i8*, i8*, i32, i8* }* @_ZTIP4INTF to i8*)
+ // CHECK-NEXT: catch i8* bitcast ({ i8*, i8*, i32, i8* }* @_ZTIPU11objcproto1P4INTF to i8*)
// CHECK-NEXT: catch i8* bitcast ({ i8*, i8*, i32, i8* }* @_ZTIP11objc_object to i8*)
// CHECK-NEXT: catch i8* bitcast ({ i8*, i8*, i32, i8* }* @_ZTIP10objc_class to i8*)
error = error;
diff --git a/clang/test/CodeGenObjCXX/mangle.mm b/clang/test/CodeGenObjCXX/mangle.mm
index 45a93a196dc..7b2ffe38025 100644
--- a/clang/test/CodeGenObjCXX/mangle.mm
+++ b/clang/test/CodeGenObjCXX/mangle.mm
@@ -78,3 +78,23 @@ void test2(Test2 *t) {
Test2Template<decltype(t.dimension)> t1;
Test2Template<decltype(t->alt_axis)> t2;
}
+
+@protocol P;
+void overload1(A<P>*) {}
+// CHECK: define void @_Z9overload1PU11objcproto1P1A
+void overload1(const A<P>*) {}
+// CHECK: define void @_Z9overload1PKU11objcproto1P1A
+void overload1(A<P>**) {}
+// CHECK: define void @_Z9overload1PPU11objcproto1P1A
+void overload1(A<P>*const*) {}
+// CHECK: define void @_Z9overload1PKPU11objcproto1P1A
+void overload1(A<P>***) {}
+// CHECK: define void @_Z9overload1PPPU11objcproto1P1A
+void overload1(void (f)(A<P>*)) {}
+// CHECK: define void @_Z9overload1PFvPU11objcproto1P1AE
+
+template<typename T> struct X { void f(); };
+template<> void X<A*>::f() {}
+// CHECK: define void @_ZN1XIP1AE1fEv
+template<> void X<A<P>*>::f() {}
+// CHECK: define void @_ZN1XIPU11objcproto1P1AE1fEv
diff --git a/clang/test/CodeGenObjCXX/rtti.mm b/clang/test/CodeGenObjCXX/rtti.mm
index 72de3ac9801..e458f090a76 100644
--- a/clang/test/CodeGenObjCXX/rtti.mm
+++ b/clang/test/CodeGenObjCXX/rtti.mm
@@ -38,14 +38,14 @@ int main() {
const std::type_info &t5 = typeid(c);
const std::type_info &t6 = typeid(*c);
- // CHECK: store {{.*}} @_ZTIP11objc_object
- // CHECK: store {{.*}} @_ZTI11objc_object
+ // CHECK: store {{.*}} @_ZTIPU11objcproto1P11objc_object
+ // CHECK: store {{.*}} @_ZTIU11objcproto1P11objc_object
id<P> i2 = 0;
const std::type_info &t7 = typeid(i2);
const std::type_info &t8 = typeid(*i2);
- // CHECK: store {{.*}} @_ZTIP10objc_class
- // CHECK: store {{.*}} @_ZTI10objc_class
+ // CHECK: store {{.*}} @_ZTIPU11objcproto1P10objc_class
+ // CHECK: store {{.*}} @_ZTIU11objcproto1P10objc_class
Class<P> c2 = 0;
const std::type_info &t9 = typeid(c2);
const std::type_info &t10 = typeid(*c2);
diff --git a/clang/test/SemaObjCXX/overload-1.mm b/clang/test/SemaObjCXX/overload-1.mm
deleted file mode 100644
index fc17ca2be98..00000000000
--- a/clang/test/SemaObjCXX/overload-1.mm
+++ /dev/null
@@ -1,25 +0,0 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s
-
-@protocol Proto1 @end
-
-@protocol Proto2 @end
-
-void f(id<Proto1> *) { } // expected-note {{previous definition is here}}
-
-void f(id<Proto1, Proto2> *) { } // expected-error {{conflicting types for 'f'}}
-
-void f(Class<Proto1> *) { } // expected-note {{previous definition is here}}
-
-void f(Class<Proto1, Proto2> *) { } // expected-error {{conflicting types for 'f'}}
-
-@interface I @end
-
-void f(I<Proto1> *) { } // expected-note {{previous definition is here}}
-
-void f(I<Proto1, Proto2> *) { } // expected-error {{conflicting types for 'f'}}
-
-@interface I1 @end
-
-void f1(I<Proto1> *) { }
-
-void f1(I1<Proto1, Proto2> *) { }
diff --git a/clang/test/SemaObjCXX/overload.mm b/clang/test/SemaObjCXX/overload.mm
index 6f24c59e3a7..bb94d9ed92c 100644
--- a/clang/test/SemaObjCXX/overload.mm
+++ b/clang/test/SemaObjCXX/overload.mm
@@ -60,9 +60,8 @@ void test2(A** ap) {
bp = ap; // expected-warning{{incompatible pointer types assigning to 'B **' from 'A **'}}
}
-// FIXME: we should either allow overloading here or give a better diagnostic
-int& cv(A*); // expected-note {{previous declaration}} expected-note 2 {{not viable}}
-float& cv(const A*); // expected-error {{cannot be overloaded}}
+int& cv(A*);
+float& cv(const A*);
int& cv2(void*);
float& cv2(const void*);
@@ -70,22 +69,20 @@ float& cv2(const void*);
void cv_test(A* a, B* b, const A* ac, const B* bc) {
int &i1 = cv(a);
int &i2 = cv(b);
- float &f1 = cv(ac); // expected-error {{no matching function}}
- float &f2 = cv(bc); // expected-error {{no matching function}}
+ float &f1 = cv(ac);
+ float &f2 = cv(bc);
int& i3 = cv2(a);
float& f3 = cv2(ac);
}
-// We agree with GCC that these can't be overloaded.
-int& qualid(id<P0>); // expected-note {{previous declaration}} expected-note {{not viable}}
-float& qualid(id<P1>); // expected-error {{cannot be overloaded}}
+int& qualid(id<P0>);
+float& qualid(id<P1>);
void qualid_test(A *a, B *b, C *c) {
int& i1 = qualid(a);
int& i2 = qualid(b);
- // This doesn't work only because the overload was rejected above.
- float& f1 = qualid(c); // expected-error {{no matching function}}
+ float& f1 = qualid(c);
id<P0> p1 = 0;
p1 = 0;
OpenPOWER on IntegriCloud