diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGenObjCXX/catch-id-type.mm | 2 | ||||
| -rw-r--r-- | clang/test/CodeGenObjCXX/mangle.mm | 20 | ||||
| -rw-r--r-- | clang/test/CodeGenObjCXX/rtti.mm | 8 | ||||
| -rw-r--r-- | clang/test/SemaObjCXX/overload-1.mm | 25 | ||||
| -rw-r--r-- | clang/test/SemaObjCXX/overload.mm | 17 |
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; |

