blob: 50413e2e9b13c42c202585167ead12f69ee3d5cb [file] [log] [blame]
Anna Zaksbbec97c2017-03-09 00:01:01 +00001// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc -analyzer-store=region -verify %s
2
3#include "Inputs/system-header-simulator.h"
4
5typedef void* gpointer;
6typedef const void* gconstpointer;
7typedef unsigned long gsize;
8typedef unsigned int guint;
9
10gpointer g_malloc(gsize n_bytes);
11gpointer g_malloc0(gsize n_bytes);
12gpointer g_realloc(gpointer mem, gsize n_bytes);
13gpointer g_try_malloc(gsize n_bytes);
14gpointer g_try_malloc0(gsize n_bytes);
15gpointer g_try_realloc(gpointer mem, gsize n_bytes);
Leslie Zhaie3986c52017-04-26 05:33:14 +000016gpointer g_malloc_n(gsize n_blocks, gsize n_block_bytes);
17gpointer g_malloc0_n(gsize n_blocks, gsize n_block_bytes);
18gpointer g_realloc_n(gpointer mem, gsize n_blocks, gsize n_block_bytes);
19gpointer g_try_malloc_n(gsize n_blocks, gsize n_block_bytes);
20gpointer g_try_malloc0_n(gsize n_blocks, gsize n_block_bytes);
21gpointer g_try_realloc_n(gpointer mem, gsize n_blocks, gsize n_block_bytes);
Anna Zaksbbec97c2017-03-09 00:01:01 +000022void g_free(gpointer mem);
23gpointer g_memdup(gconstpointer mem, guint byte_size);
24
25static const gsize n_bytes = 1024;
26
27void f1() {
28 gpointer g1 = g_malloc(n_bytes);
29 gpointer g2 = g_malloc0(n_bytes);
30 g1 = g_realloc(g1, n_bytes * 2);
31 gpointer g3 = g_try_malloc(n_bytes);
32 gpointer g4 = g_try_malloc0(n_bytes);
33 g3 = g_try_realloc(g3, n_bytes * 2);
Leslie Zhaie3986c52017-04-26 05:33:14 +000034 gpointer g5 = g_malloc_n(n_bytes, sizeof(char));
35 gpointer g6 = g_malloc0_n(n_bytes, sizeof(char));
36 g5 = g_realloc_n(g5, n_bytes * 2, sizeof(char));
37 gpointer g7 = g_try_malloc_n(n_bytes, sizeof(char));
38 gpointer g8 = g_try_malloc0_n(n_bytes, sizeof(char));
39 g7 = g_try_realloc_n(g7, n_bytes * 2, sizeof(char));
Anna Zaksbbec97c2017-03-09 00:01:01 +000040
41 g_free(g1);
42 g_free(g2);
43 g_free(g2); // expected-warning{{Attempt to free released memory}}
44}
45
46void f2() {
47 gpointer g1 = g_malloc(n_bytes);
48 gpointer g2 = g_malloc0(n_bytes);
49 g1 = g_realloc(g1, n_bytes * 2);
50 gpointer g3 = g_try_malloc(n_bytes);
51 gpointer g4 = g_try_malloc0(n_bytes);
52 g3 = g_try_realloc(g3, n_bytes * 2);
Leslie Zhaie3986c52017-04-26 05:33:14 +000053 gpointer g5 = g_malloc_n(n_bytes, sizeof(char));
54 gpointer g6 = g_malloc0_n(n_bytes, sizeof(char));
55 g5 = g_realloc_n(g5, n_bytes * 2, sizeof(char));
56 gpointer g7 = g_try_malloc_n(n_bytes, sizeof(char));
57 gpointer g8 = g_try_malloc0_n(n_bytes, sizeof(char));
58 g7 = g_try_realloc_n(g7, n_bytes * 2, sizeof(char));
Anna Zaksbbec97c2017-03-09 00:01:01 +000059
60 g_free(g1);
61 g_free(g2);
62 g_free(g3);
63 g3 = g_memdup(g3, n_bytes); // expected-warning{{Use of memory after it is freed}}
64}
65
66void f3() {
67 gpointer g1 = g_malloc(n_bytes);
68 gpointer g2 = g_malloc0(n_bytes);
69 g1 = g_realloc(g1, n_bytes * 2);
70 gpointer g3 = g_try_malloc(n_bytes);
71 gpointer g4 = g_try_malloc0(n_bytes);
72 g3 = g_try_realloc(g3, n_bytes * 2); // expected-warning{{Potential leak of memory pointed to by 'g4'}}
Leslie Zhaie3986c52017-04-26 05:33:14 +000073 gpointer g5 = g_malloc_n(n_bytes, sizeof(char));
74 gpointer g6 = g_malloc0_n(n_bytes, sizeof(char));
75 g5 = g_realloc_n(g5, n_bytes * 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g6'}}
76 gpointer g7 = g_try_malloc_n(n_bytes, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g5'}}
77 gpointer g8 = g_try_malloc0_n(n_bytes, sizeof(char));
78 g7 = g_try_realloc_n(g7, n_bytes * 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
79
80 g_free(g1); // expected-warning{{Potential leak of memory pointed to by 'g7'}}
81 g_free(g2);
82 g_free(g3);
83}
84
85void f4() {
86 gpointer g1 = g_malloc(n_bytes);
87 gpointer g2 = g_malloc0(n_bytes);
88 g1 = g_realloc(g1, n_bytes * 2);
89 gpointer g3 = g_try_malloc(n_bytes);
90 gpointer g4 = g_try_malloc0(n_bytes);
91 g3 = g_try_realloc(g3, n_bytes * 2);
92 gpointer g5 = g_malloc_n(n_bytes, sizeof(char));
93 gpointer g6 = g_malloc0_n(n_bytes, sizeof(char));
94 g5 = g_realloc_n(g5, n_bytes * 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g6'}}
95 gpointer g7 = g_try_malloc_n(n_bytes, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g5'}}
96 gpointer g8 = g_try_malloc0_n(n_bytes, sizeof(char));
97 g7 = g_try_realloc_n(g7, n_bytes * 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
98
99 g_free(g1); // expected-warning{{Potential leak of memory pointed to by 'g7'}}
100 g_free(g2);
101 g_free(g3);
102 g_free(g4);
103}
104
105void f5() {
106 gpointer g1 = g_malloc(n_bytes);
107 gpointer g2 = g_malloc0(n_bytes);
108 g1 = g_realloc(g1, n_bytes * 2);
109 gpointer g3 = g_try_malloc(n_bytes);
110 gpointer g4 = g_try_malloc0(n_bytes);
111 g3 = g_try_realloc(g3, n_bytes * 2);
112 gpointer g5 = g_malloc_n(n_bytes, sizeof(char));
113 gpointer g6 = g_malloc0_n(n_bytes, sizeof(char));
114 g5 = g_realloc_n(g5, n_bytes * 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g6'}}
115 gpointer g7 = g_try_malloc_n(n_bytes, sizeof(char));
116 gpointer g8 = g_try_malloc0_n(n_bytes, sizeof(char));
117 g7 = g_try_realloc_n(g7, n_bytes * 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
118
119 g_free(g1); // expected-warning{{Potential leak of memory pointed to by 'g7'}}
120 g_free(g2);
121 g_free(g3);
122 g_free(g4);
123 g_free(g5);
124}
125
126void f6() {
127 gpointer g1 = g_malloc(n_bytes);
128 gpointer g2 = g_malloc0(n_bytes);
129 g1 = g_realloc(g1, n_bytes * 2);
130 gpointer g3 = g_try_malloc(n_bytes);
131 gpointer g4 = g_try_malloc0(n_bytes);
132 g3 = g_try_realloc(g3, n_bytes * 2);
133 gpointer g5 = g_malloc_n(n_bytes, sizeof(char));
134 gpointer g6 = g_malloc0_n(n_bytes, sizeof(char));
135 g5 = g_realloc_n(g5, n_bytes * 2, sizeof(char));
136 gpointer g7 = g_try_malloc_n(n_bytes, sizeof(char));
137 gpointer g8 = g_try_malloc0_n(n_bytes, sizeof(char));
138 g7 = g_try_realloc_n(g7, n_bytes * 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
139
140 g_free(g1); // expected-warning{{Potential leak of memory pointed to by 'g7'}}
141 g_free(g2);
142 g_free(g3);
143 g_free(g4);
144 g_free(g5);
145 g_free(g6);
146}
147
148void f7() {
149 gpointer g1 = g_malloc(n_bytes);
150 gpointer g2 = g_malloc0(n_bytes);
151 g1 = g_realloc(g1, n_bytes * 2);
152 gpointer g3 = g_try_malloc(n_bytes);
153 gpointer g4 = g_try_malloc0(n_bytes);
154 g3 = g_try_realloc(g3, n_bytes * 2);
155 gpointer g5 = g_malloc_n(n_bytes, sizeof(char));
156 gpointer g6 = g_malloc0_n(n_bytes, sizeof(char));
157 g5 = g_realloc_n(g5, n_bytes * 2, sizeof(char));
158 gpointer g7 = g_try_malloc_n(n_bytes, sizeof(char));
159 gpointer g8 = g_try_malloc0_n(n_bytes, sizeof(char));
160 g7 = g_try_realloc_n(g7, n_bytes * 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
Anna Zaksbbec97c2017-03-09 00:01:01 +0000161
162 g_free(g1);
163 g_free(g2);
164 g_free(g3);
Leslie Zhaie3986c52017-04-26 05:33:14 +0000165 g_free(g4);
166 g_free(g5);
167 g_free(g6);
168 g_free(g7);
Anna Zaksbbec97c2017-03-09 00:01:01 +0000169}