arc-type-conversion.mm revision b8b0313e84700b5c6d597b3be4de41c97b7550f1
1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// RUN: %clang_cc1 -fobjc-nonfragile-abi -fsyntax-only -fobjc-arc -verify -fblocks %s 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// rdar://8843600 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid * cvt(id arg) // expected-note{{candidate function not viable: cannot convert argument of incomplete type 'void *' to '__strong id'}} 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch{ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void* voidp_val; 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(int*)arg; // expected-error {{cast of an Objective-C pointer to 'int *' is disallowed with ARC}} 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(id)arg; 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__autoreleasing id*)arg; // expected-error{{C-style cast from 'id' to '__autoreleasing id *' casts away qualifiers}} 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(id*)arg; // expected-error {{pointer to non-const type 'id' with no explicit ownership}} \ 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // expected-error{{C-style cast from 'id' to '__autoreleasing id *' casts away qualifiers}} 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__autoreleasing id**)voidp_val; 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) (void)(void*)voidp_val; 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) (void)(void**)arg; // expected-error {{cast of an Objective-C pointer to 'void **' is disallowed}} 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cvt((void*)arg); // expected-error {{cast of Objective-C pointer type 'id' to C pointer type 'void *' requires a bridged cast}} \ 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // expected-error {{no matching function for call to 'cvt'}} \ 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // expected-note{{use __bridge to convert directly (no change in ownership)}} \ 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // expected-note{{use __bridge_retained to make an ARC object available as a +1 'void *'}} 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cvt(0); 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) (void)(__strong id**)(0); 2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // FIXME: Diagnostic could be better here. 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return arg; // expected-error{{cannot initialize return object of type 'void *' with an lvalue of type '__strong id'}} 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// rdar://8898937 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace rdar8898937 { 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochtypedef void (^dispatch_block_t)(void); 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid dispatch_once(dispatch_block_t block); 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstatic void _dispatch_once(dispatch_block_t block) 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch{ 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) dispatch_once(block); 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void static_casts(id arg) { 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void* voidp_val; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (void)static_cast<int*>(arg); // expected-error {{cannot cast from type 'id' to pointer type 'int *'}} 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)static_cast<id>(arg); 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)static_cast<__autoreleasing id*>(arg); // expected-error{{cannot cast from type 'id' to pointer type '__autoreleasing id *'}} 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)static_cast<id*>(arg); // expected-error {{cannot cast from type 'id' to pointer type '__autoreleasing id *'}} \ 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // expected-error{{pointer to non-const type 'id' with no explicit ownership}} 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) (void)static_cast<__autoreleasing id**>(voidp_val); 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (void)static_cast<void*>(voidp_val); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (void)static_cast<void**>(arg); // expected-error {{cannot cast from type 'id' to pointer type 'void **'}} 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (void)static_cast<__strong id**>(0); 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch __strong id *idp; 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (void)static_cast<__autoreleasing id*>(idp); // expected-error{{static_cast from '__strong id *' to '__autoreleasing id *' is not allowed}} 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (void)static_cast<__weak id*>(idp); // expected-error{{static_cast from '__strong id *' to '__weak id *' is not allowed}} 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void test_const_cast(__strong id *sip, __weak id *wip, 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const __strong id *csip, __weak const id *cwip) { 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Cannot use const_cast to cast between ownership qualifications or 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // add/remove ownership qualifications. 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) (void)const_cast<__strong id *>(wip); // expected-error{{is not allowed}} 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)const_cast<__weak id *>(sip); // expected-error{{is not allowed}} 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // It's acceptable to cast away constness. 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)const_cast<__strong id *>(csip); 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (void)const_cast<__weak id *>(cwip); 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void test_reinterpret_cast(__strong id *sip, __weak id *wip, 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const __strong id *csip, __weak const id *cwip) { 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Okay to reinterpret_cast to add/remove/change ownership 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // qualifications. 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<__strong id *>(wip); 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<__weak id *>(sip); 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Not allowed to cast away constness 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<__strong id *>(csip); // expected-error{{reinterpret_cast from '__strong id const *' to '__strong id *' casts away qualifiers}} 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<__weak id *>(cwip); // expected-error{{reinterpret_cast from '__weak id const *' to '__weak id *' casts away qualifiers}} 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<__weak id *>(csip); // expected-error{{reinterpret_cast from '__strong id const *' to '__weak id *' casts away qualifiers}} 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<__strong id *>(cwip); // expected-error{{reinterpret_cast from '__weak id const *' to '__strong id *' casts away qualifiers}} 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void test_cstyle_cast(__strong id *sip, __weak id *wip, 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const __strong id *csip, __weak const id *cwip) { 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // C-style casts aren't allowed to change Objective-C ownership 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // qualifiers (beyond what the normal implicit conversion allows). 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(__strong id *)wip; // expected-error{{C-style cast from '__weak id *' to '__strong id *' casts away qualifiers}} 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(__strong id *)cwip; // expected-error{{C-style cast from '__weak id const *' to '__strong id *' casts away qualifiers}} 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__weak id *)sip; // expected-error{{C-style cast from '__strong id *' to '__weak id *' casts away qualifiers}} 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__weak id *)csip; // expected-error{{C-style cast from '__strong id const *' to '__weak id *' casts away qualifiers}} 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (void)(__strong const id *)wip; // expected-error{{C-style cast from '__weak id *' to '__strong id const *' casts away qualifiers}} 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__strong const id *)cwip; // expected-error{{C-style cast from '__weak id const *' to '__strong id const *' casts away qualifiers}} 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__weak const id *)sip; // expected-error{{C-style cast from '__strong id *' to '__weak id const *' casts away qualifiers}} 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__weak const id *)csip; // expected-error{{C-style cast from '__strong id const *' to '__weak id const *' casts away qualifiers}} 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (void)(__autoreleasing const id *)wip; // expected-error{{C-style cast from '__weak id *' to '__autoreleasing id const *' casts away qualifiers}} 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__autoreleasing const id *)cwip; // expected-error{{C-style cast from '__weak id const *' to '__autoreleasing id const *' casts away qualifiers}} 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__autoreleasing const id *)sip; 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)(__autoreleasing const id *)csip; 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid test_functional_cast(__strong id *sip, __weak id *wip, 10568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __autoreleasing id *aip) { 10668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Functional casts aren't allowed to change Objective-C ownership 10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // qualifiers (beyond what the normal implicit conversion allows). 10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) typedef __strong id *strong_id_pointer; 11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) typedef __weak id *weak_id_pointer; 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef __autoreleasing id *autoreleasing_id_pointer; 11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) typedef const __strong id *const_strong_id_pointer; 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef const __weak id *const_weak_id_pointer; 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef const __autoreleasing id *const_autoreleasing_id_pointer; 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)strong_id_pointer(wip); // expected-error{{functional-style cast from '__weak id *' to 'strong_id_pointer' (aka '__strong id *') casts away qualifiers}} 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)weak_id_pointer(sip); // expected-error{{functional-style cast from '__strong id *' to 'weak_id_pointer' (aka '__weak id *') casts away qualifiers}} 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)autoreleasing_id_pointer(sip); // expected-error{{functional-style cast from '__strong id *' to 'autoreleasing_id_pointer' (aka '__autoreleasing id *') casts away qualifiers}} 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)autoreleasing_id_pointer(wip); // expected-error{{functional-style cast from '__weak id *' to 'autoreleasing_id_pointer' (aka '__autoreleasing id *') casts away qualifiers}} 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)const_strong_id_pointer(wip); // expected-error{{functional-style cast from '__weak id *' to 'const_strong_id_pointer' (aka 'const __strong id *') casts away qualifiers}} 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)const_weak_id_pointer(sip); // expected-error{{functional-style cast from '__strong id *' to 'const_weak_id_pointer' (aka 'const __weak id *') casts away qualifiers}} 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)const_autoreleasing_id_pointer(sip); 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)const_autoreleasing_id_pointer(aip); 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch (void)const_autoreleasing_id_pointer(wip); // expected-error{{functional-style cast from '__weak id *' to 'const_autoreleasing_id_pointer' (aka 'const __autoreleasing id *') casts away qualifiers}} 12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid test_unsafe_unretained(__strong id *sip, __weak id *wip, 12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __autoreleasing id *aip, 130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch __unsafe_unretained id *uip, 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const __unsafe_unretained id *cuip) { 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uip = sip; // expected-error{{assigning to '__unsafe_unretained id *' from incompatible type '__strong id *'}} 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uip = wip; // expected-error{{assigning to '__unsafe_unretained id *' from incompatible type '__weak id *'}} 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uip = aip; // expected-error{{assigning to '__unsafe_unretained id *' from incompatible type '__autoreleasing id *'}} 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cuip = sip; 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cuip = wip; // expected-error{{assigning to '__unsafe_unretained id const *' from incompatible type '__weak id *'}} 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cuip = aip; 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void to_void(__strong id *sip, __weak id *wip, 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __autoreleasing id *aip, 143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __unsafe_unretained id *uip) { 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void *vp1 = sip; 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void *vp2 = wip; 146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void *vp3 = aip; 147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void *vp4 = uip; 148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(void*)sip; 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(void*)wip; 150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(void*)aip; 151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(void*)uip; 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)static_cast<void*>(sip); 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)static_cast<void*>(wip); 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)static_cast<void*>(aip); 155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)static_cast<void*>(uip); 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<void*>(sip); 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<void*>(wip); 158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<void*>(aip); 159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<void*>(uip); 160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(void*)&sip; 162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(void*)&wip; 163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(void*)&aip; 164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)(void*)&uip; 165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)static_cast<void*>(&sip); 166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)static_cast<void*>(&wip); 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (void)static_cast<void*>(&aip); 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (void)static_cast<void*>(&uip); 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (void)reinterpret_cast<void*>(&sip); 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (void)reinterpret_cast<void*>(&wip); 171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<void*>(&aip); 172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void)reinterpret_cast<void*>(&uip); 173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void from_void(void *vp) { 176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __strong id *sip = (__strong id *)vp; 177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __weak id *wip = (__weak id *)vp; 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __autoreleasing id *aip = (__autoreleasing id *)vp; 17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __unsafe_unretained id *uip = (__unsafe_unretained id *)vp; 18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __strong id *sip2 = static_cast<__strong id *>(vp); 18168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __weak id *wip2 = static_cast<__weak id *>(vp); 18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __autoreleasing id *aip2 = static_cast<__autoreleasing id *>(vp); 18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __unsafe_unretained id *uip2 = static_cast<__unsafe_unretained id *>(vp); 18468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __strong id *sip3 = reinterpret_cast<__strong id *>(vp); 18568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __weak id *wip3 = reinterpret_cast<__weak id *>(vp); 18668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __autoreleasing id *aip3 = reinterpret_cast<__autoreleasing id *>(vp); 18768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __unsafe_unretained id *uip3 = reinterpret_cast<__unsafe_unretained id *>(vp); 18868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 18968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __strong id **sipp = (__strong id **)vp; 19068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __weak id **wipp = (__weak id **)vp; 19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __autoreleasing id **aipp = (__autoreleasing id **)vp; 19268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) __unsafe_unretained id **uipp = (__unsafe_unretained id **)vp; 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) sip = vp; // expected-error{{assigning to '__strong id *' from incompatible type 'void *'}} 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) wip = vp; // expected-error{{assigning to '__weak id *' from incompatible type 'void *'}} 19668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) aip = vp; // expected-error{{assigning to '__autoreleasing id *' from incompatible type 'void *'}} 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) uip = vp; // expected-error{{assigning to '__unsafe_unretained id *' from incompatible type 'void *'}} 19868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 19968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)