uninit-vals-ps.c revision d7d5f0223bd30dfd618762349c6209dd1d5ea3e6
1// RUN: clang-cc -analyze -checker-cfref -verify %s &&
2// RUN: clang-cc -analyze -checker-cfref -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 call 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// <rdar://problem/6451816>
53typedef unsigned char Boolean;
54typedef const struct __CFNumber * CFNumberRef;
55typedef signed long CFIndex;
56typedef CFIndex CFNumberType;
57typedef unsigned long UInt32;
58typedef UInt32 CFStringEncoding;
59typedef const struct __CFString * CFStringRef;
60extern Boolean CFNumberGetValue(CFNumberRef number, CFNumberType theType, void *valuePtr);
61extern CFStringRef CFStringConvertEncodingToIANACharSetName(CFStringEncoding encoding);
62
63CFStringRef rdar_6451816(CFNumberRef nr) {
64  CFStringEncoding encoding;
65  // &encoding is casted to void*.  This test case tests whether or not
66  // we properly invalidate the value of 'encoding'.
67  CFNumberGetValue(nr, 9, &encoding);
68  return CFStringConvertEncodingToIANACharSetName(encoding); // no-warning
69}
70
71