brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · b89aab0 Raw
196 lines · plain
1// RUN: %clang_analyze_cc1 -analyzer-config eagerly-assume=false %s -analyzer-checker=osx.cocoa.RetainCount,deadcode.DeadStores,core -analyzer-output=plist -analyzer-config deadcode.DeadStores:ShowFixIts=true -o %t.plist2// RUN: %normalize_plist <%t.plist | diff -ub %S/Inputs/expected-plists/plist-output.m.plist -3 4void test_null_init(void) {5  int *p = 0;6  *p = 0xDEADBEEF;7}8 9void test_null_assign(void) {10  int *p;11  p = 0;12  *p = 0xDEADBEEF;13}14 15void test_null_assign_transitive(void) {16  int *p;17  p = 0;18  int *q = p;19  *q = 0xDEADBEEF;20}21 22void test_null_cond(int *p) {23  if (!p) {24    *p = 0xDEADBEEF;25  }26}27 28void test_null_cond_transitive(int *q) {29  if (!q) {30    int *p = q;31    *p = 0xDEADBEEF;32  }33}34 35void test_null_field(void) {36  struct s { int *p; } x;37  x.p = 0;38  *(x.p) = 0xDEADBEEF;39}40 41void test_assumptions(int a, int b)42{43  if (a == 0) {44    return;45  }46  if (b != 0) {47    return;48  }49  int *p = 0;50  *p = 0xDEADBEEF;51}52 53int *bar_cond_assign(void);54int test_cond_assign(void) {55  int *p;56  if (p = bar_cond_assign())57    return 1;58  return *p;59}60 61// The following previously crashed when generating extensive diagnostics.62@interface RDar10797980_help63@property (readonly) int x;64@end65 66@interface RDar10797980 {67  RDar10797980_help *y;68}69- (void) test;70@end71 72@implementation RDar1079798073- (void) test {74  if (y.x == 1) {75    int *p = 0;76    *p = 0xDEADBEEF; // expected-warning {{deference}}77  }78}79 80// The original source for the above Radar contains another problem:81// if the end-of-path node is an implicit statement, it may not have a valid82// source location.83- (void)test2 {84  if (bar_cond_assign()) {85    id foo = [[RDar10797980 alloc] init]; // leak86  }87  (void)y; // first statement after the 'if' is an implicit 'self' DeclRefExpr88}89 90@end91 92// Test that loops are documented in the path.93void rdar12280665(void) {94  for (unsigned i = 0; i < 2; ++i) {95	  if (i == 1) {96		  int *p = 0;97		  *p = 0xDEADBEEF; // expected-warning {{dereference}}98	  }99  }100}101 102// Test for a "loop executed 0 times" diagnostic.103int *radar12322528_bar(void);104 105void radar12322528_for(int x) {106  int *p = 0;107  for (unsigned i = 0; i < x; ++i) {108    p = radar12322528_bar();109  }110  *p = 0xDEADBEEF;111}112 113void radar12322528_while(int x) {114  int *p = 0;115  unsigned i = 0;116  for ( ; i < x ; ) {117    ++i;118    p = radar12322528_bar();119  }120  *p = 0xDEADBEEF;121}122 123void radar12322528_foo_2(void) {124  int *p = 0;125  for (unsigned i = 0; i < 2; ++i) {126    if (i == 1)127      break;128  }129  *p = 0xDEADBEEF;130}131 132void test_loop_diagnostics(void) {133  int *p = 0;134  for (int i = 0; i < 2; ++i) { p = 0; }135  *p = 1;136}137 138void test_loop_diagnostics_2(void) {139  int *p = 0;140  for (int i = 0; i < 2; ) {141    ++i;142    p = 0;143  }144  *p = 1;145}146 147void test_loop_diagnostics_3(void) {148  int *p = 0;149  int i = 0;150  while (i < 2) {151    ++i;152    p = 0;153  }154  *p = 1;155}156 157void test_loop_fast_enumeration(id arr) {158  int x;159  for (id obj in arr) {160    x = 1;161  }162  x += 1;163}164 165@interface RDar12114812 { char *p; }166@end167 168@implementation RDar12114812169- (void)test {170  p = 0;171  *p = 1;172}173@end174 175// Test diagnostics for initialization of structs.176void RDar13295437_f(void *i) __attribute__((__nonnull__));177 178struct  RDar13295437_S { int *i; };179 180void RDar13295437(void) {181  struct RDar13295437_S s = {0};182  struct RDar13295437_S *sp = &s;183  RDar13295437_f(sp->i);184}185 186@interface Foo187- (int *) returnsPointer;188@end189 190int testFoo(Foo *x) {191  if (x)192    return 1;193  return *[x returnsPointer];194}195 196