• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core -analyzer-store=region -analyzer-constraints=range -verify -Wno-null-dereference %s
2 // XFAIL
3 
4 typedef typeof(sizeof(int)) size_t;
5 void malloc (size_t);
6 
f1()7 void f1() {
8   int const &i = 3;  // <--- **FIXME** This is currently not being modeled correctly.
9   int b = i;
10 
11   int *p = 0;
12 
13   if (b != 3)
14     *p = 1; // no-warning
15 }
16 
17 char* ptr();
18 char& ref();
19 
20 // These next two tests just shouldn't crash.
t1()21 char t1 () {
22   ref() = 'c';
23   return '0';
24 }
25 
26 // just a sanity test, the same behavior as t1()
t2()27 char t2 () {
28   *ptr() = 'c';
29   return '0';
30 }
31 
32 // Each of the tests below is repeated with pointers as well as references.
33 // This is mostly a sanity check, but then again, both should work!
t3()34 char t3 () {
35   char& r = ref();
36   r = 'c'; // no-warning
37   if (r) return r;
38   return *(char*)0; // no-warning
39 }
40 
t4()41 char t4 () {
42   char* p = ptr();
43   *p = 'c'; // no-warning
44   if (*p) return *p;
45   return *(char*)0; // no-warning
46 }
47 
t5(char & r)48 char t5 (char& r) {
49   r = 'c'; // no-warning
50   if (r) return r;
51   return *(char*)0; // no-warning
52 }
53 
t6(char * p)54 char t6 (char* p) {
55   *p = 'c'; // no-warning
56   if (*p) return *p;
57   return *(char*)0; // no-warning
58 }
59