xref: /aosp_15_r20/external/clang/test/Analysis/misc-ps-region-store.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -triple i386-apple-darwin9 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks %s
2*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -analyze -analyzer-checker=core,alpha.core -analyzer-store=region -verify -fblocks   -analyzer-opt-analyze-nested-blocks %s
3*67e74705SXin Li// expected-no-diagnostics
4*67e74705SXin Li
5*67e74705SXin Li//===------------------------------------------------------------------------------------------===//
6*67e74705SXin Li// This files tests our path-sensitive handling of Objective-c++ files.
7*67e74705SXin Li//===------------------------------------------------------------------------------------------===//
8*67e74705SXin Li
9*67e74705SXin Li// Test basic handling of references.
10*67e74705SXin Lichar &test1_aux();
11*67e74705SXin Lichar *test1() {
12*67e74705SXin Li  return &test1_aux();
13*67e74705SXin Li}
14*67e74705SXin Li
15*67e74705SXin Li// Test test1_aux() evaluates to char &.
16*67e74705SXin Lichar test1_as_rvalue() {
17*67e74705SXin Li  return test1_aux();
18*67e74705SXin Li}
19*67e74705SXin Li
20*67e74705SXin Li// Test basic handling of references with Objective-C classes.
21*67e74705SXin Li@interface Test1
22*67e74705SXin Li- (char&) foo;
23*67e74705SXin Li@end
24*67e74705SXin Li
25*67e74705SXin Lichar* Test1_harness(Test1 *p) {
26*67e74705SXin Li  return &[p foo];
27*67e74705SXin Li}
28*67e74705SXin Li
29*67e74705SXin Lichar Test1_harness_b(Test1 *p) {
30*67e74705SXin Li  return [p foo];
31*67e74705SXin Li}
32*67e74705SXin Li
33*67e74705SXin Li// Basic test of C++ references with Objective-C pointers.
34*67e74705SXin Li@interface RDar10569024
35*67e74705SXin Li@property(readonly) int x;
36*67e74705SXin Li@end
37*67e74705SXin Li
38*67e74705SXin Litypedef RDar10569024* RDar10569024Ref;
39*67e74705SXin Li
40*67e74705SXin Livoid rdar10569024_aux(RDar10569024Ref o);
41*67e74705SXin Li
42*67e74705SXin Liint rdar10569024(id p, id collection) {
43*67e74705SXin Li  for (id elem in collection) {
44*67e74705SXin Li    const RDar10569024Ref &o = (RDar10569024Ref) elem;
45*67e74705SXin Li    rdar10569024_aux(o); // no-warning
46*67e74705SXin Li    return o.x; // no-warning
47*67e74705SXin Li  }
48*67e74705SXin Li  return 0;
49*67e74705SXin Li}
50