Clang Project

clang_source_code/test/SemaObjCXX/arc-ptr-comparison.mm
1// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -verify %s
2// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin11 -fsyntax-only -verify -DNOARC %s
3#ifdef NOARC
4// expected-no-diagnostics
5#endif
6
7int testObjCComparisonRules(void *v, id x, id y) {
8  return v == x;
9#ifndef NOARC
10// expected-error@-2 {{implicit conversion of Objective-C pointer type 'id' to C pointer type 'void *' requires a bridged cast}}
11// expected-note@-3 {{use __bridge to convert directly (no change in ownership)}}
12// expected-note@-4 {{use __bridge_retained to make an ARC object available as a +1 'void *'}}
13#endif
14  return v >= x;
15#ifndef NOARC
16// expected-error@-2 {{implicit conversion of Objective-C pointer type 'id' to C pointer type 'void *' requires a bridged cast}}
17// expected-note@-3 {{use __bridge to convert directly (no change in ownership)}}
18// expected-note@-4 {{use __bridge_retained to make an ARC object available as a +1 'void *'}}
19#endif
20  return v == (id)(void *)0; // OK
21  return v == nullptr; // OK
22  return v == (void *)0;
23  return x == y;
24}
25