uninit-vals-ps.c revision 7c686661d65c63f6f518ca81830dd61bd64bfe1f
1// RUN: clang -checker-simple -verify %s &&
2// RUN: clang -checker-simple -analyzer-store-region -verify %s
3
4struct FPRec {
5  void (*my_func)(int * x);
6};
7
8int bar(int x);
9
10int f1_a(struct FPRec* foo) {
11  int x;
12  (*foo->my_func)(&x);
13  return bar(x)+1; // no-warning
14}
15
16int f1_b() {
17  int x;
18  return bar(x)+1;  // expected-warning{{Pass-by-value argument in function is undefined.}}
19}
20
21int f2() {
22
23  int x;
24
25  if (x+1)  // expected-warning{{Branch}}
26    return 1;
27
28  return 2;
29}
30
31int f2_b() {
32  int x;
33
34  return ((x+1)+2+((x))) + 1 ? 1 : 2; // expected-warning{{Branch}}
35}
36
37int f3(void) {
38  int i;
39  int *p = &i;
40  if (*p > 0) // expected-warning{{Branch condition evaluates to an uninitialized value}}
41    return 0;
42  else
43    return 1;
44}
45
46int ret_uninit() {
47  int i;
48  int *p = &i;
49  return *p;  // expected-warning{{Uninitialized or undefined return value returned to caller.}}
50}
51
52
53