xref: /aosp_15_r20/external/clang/test/Analysis/default-analyze.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang --analyze %s -o %t
2*67e74705SXin Li
3*67e74705SXin Li// Tests that some specific checkers are enabled by default.
4*67e74705SXin Li
5*67e74705SXin Liid foo(int x) {
6*67e74705SXin Li  id title;
7*67e74705SXin Li  switch (x) {
8*67e74705SXin Li  case 1:
9*67e74705SXin Li    title = @"foo"; // expected-warning {{never read}}
10*67e74705SXin Li  case 2:
11*67e74705SXin Li    title = @"bar";
12*67e74705SXin Li    break;
13*67e74705SXin Li  default:
14*67e74705SXin Li    title = @"baz";
15*67e74705SXin Li    break;
16*67e74705SXin Li  }
17*67e74705SXin Li  return title;
18*67e74705SXin Li}
19*67e74705SXin Li
20*67e74705SXin Li// <rdar://problem/8808566> Static analyzer is wrong: NSWidth(imgRect) not understood as unconditional assignment
21*67e74705SXin Li//
22*67e74705SXin Li// Note: this requires inlining support.  This previously issued a false positive use of
23*67e74705SXin Li// uninitialized value when calling NSWidth.
24*67e74705SXin Litypedef double CGFloat;
25*67e74705SXin Li
26*67e74705SXin Listruct CGPoint {
27*67e74705SXin Li  CGFloat x;
28*67e74705SXin Li  CGFloat y;
29*67e74705SXin Li};
30*67e74705SXin Litypedef struct CGPoint CGPoint;
31*67e74705SXin Li
32*67e74705SXin Listruct CGSize {
33*67e74705SXin Li  CGFloat width;
34*67e74705SXin Li  CGFloat height;
35*67e74705SXin Li};
36*67e74705SXin Litypedef struct CGSize CGSize;
37*67e74705SXin Li
38*67e74705SXin Listruct CGRect {
39*67e74705SXin Li  CGPoint origin;
40*67e74705SXin Li  CGSize size;
41*67e74705SXin Li};
42*67e74705SXin Litypedef struct CGRect CGRect;
43*67e74705SXin Li
44*67e74705SXin Litypedef CGRect NSRect;
45*67e74705SXin Litypedef CGSize NSSize;
46*67e74705SXin Li
47*67e74705SXin Listatic __inline__ __attribute__((always_inline)) CGFloat NSWidth(NSRect aRect) {
48*67e74705SXin Li    return (aRect.size.width);
49*67e74705SXin Li}
50*67e74705SXin Li
51*67e74705SXin Listatic __inline__ __attribute__((always_inline)) CGFloat NSHeight(NSRect aRect) {
52*67e74705SXin Li    return (aRect.size.height);
53*67e74705SXin Li}
54*67e74705SXin Li
55*67e74705SXin LiNSSize rdar880566_size();
56*67e74705SXin Li
57*67e74705SXin Lidouble rdar8808566() {
58*67e74705SXin Li  NSRect myRect;
59*67e74705SXin Li  myRect.size = rdar880566_size();
60*67e74705SXin Li  double x = NSWidth(myRect) + NSHeight(myRect); // no-warning
61*67e74705SXin Li  return x;
62*67e74705SXin Li}
63*67e74705SXin Li
64