1 // RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc -verify %s
3 #include "Inputs/system-header-simulator.h"
5 typedef void* gpointer
;
6 typedef const void* gconstpointer
;
7 typedef unsigned long gsize
;
8 typedef unsigned int guint
;
10 gpointer
g_malloc(gsize n_bytes
);
11 gpointer
g_malloc0(gsize n_bytes
);
12 gpointer
g_realloc(gpointer mem
, gsize n_bytes
);
13 gpointer
g_try_malloc(gsize n_bytes
);
14 gpointer
g_try_malloc0(gsize n_bytes
);
15 gpointer
g_try_realloc(gpointer mem
, gsize n_bytes
);
16 gpointer
g_malloc_n(gsize n_blocks
, gsize n_block_bytes
);
17 gpointer
g_malloc0_n(gsize n_blocks
, gsize n_block_bytes
);
18 gpointer
g_realloc_n(gpointer mem
, gsize n_blocks
, gsize n_block_bytes
);
19 gpointer
g_try_malloc_n(gsize n_blocks
, gsize n_block_bytes
);
20 gpointer
g_try_malloc0_n(gsize n_blocks
, gsize n_block_bytes
);
21 gpointer
g_try_realloc_n(gpointer mem
, gsize n_blocks
, gsize n_block_bytes
);
22 void g_free(gpointer mem
);
23 gpointer
g_memdup(gconstpointer mem
, guint byte_size
);
24 gpointer
g_strconcat(gconstpointer string1
, ...);
26 static const gsize n_bytes
= 1024;
29 gpointer g1
= g_malloc(n_bytes
);
30 gpointer g2
= g_malloc0(n_bytes
);
31 g1
= g_realloc(g1
, n_bytes
* 2);
32 gpointer g3
= g_try_malloc(n_bytes
);
33 gpointer g4
= g_try_malloc0(n_bytes
);
34 g3
= g_try_realloc(g3
, n_bytes
* 2);
35 gpointer g5
= g_malloc_n(n_bytes
, sizeof(char));
36 gpointer g6
= g_malloc0_n(n_bytes
, sizeof(char));
37 g5
= g_realloc_n(g5
, n_bytes
* 2, sizeof(char));
38 gpointer g7
= g_try_malloc_n(n_bytes
, sizeof(char));
39 gpointer g8
= g_try_malloc0_n(n_bytes
, sizeof(char));
40 g7
= g_try_realloc_n(g7
, n_bytes
* 2, sizeof(char));
44 g_free(g2
); // expected-warning{{Attempt to free released memory}}
48 gpointer g1
= g_malloc(n_bytes
);
49 gpointer g2
= g_malloc0(n_bytes
);
50 g1
= g_realloc(g1
, n_bytes
* 2);
51 gpointer g3
= g_try_malloc(n_bytes
);
52 gpointer g4
= g_try_malloc0(n_bytes
);
53 g3
= g_try_realloc(g3
, n_bytes
* 2);
54 gpointer g5
= g_malloc_n(n_bytes
, sizeof(char));
55 gpointer g6
= g_malloc0_n(n_bytes
, sizeof(char));
56 g5
= g_realloc_n(g5
, n_bytes
* 2, sizeof(char));
57 gpointer g7
= g_try_malloc_n(n_bytes
, sizeof(char));
58 gpointer g8
= g_try_malloc0_n(n_bytes
, sizeof(char));
59 g7
= g_try_realloc_n(g7
, n_bytes
* 2, sizeof(char));
64 g3
= g_memdup(g3
, n_bytes
); // expected-warning{{Use of memory after it is freed}}
68 gpointer g1
= g_malloc(n_bytes
);
69 gpointer g2
= g_malloc0(n_bytes
);
70 g1
= g_realloc(g1
, n_bytes
* 2);
71 gpointer g3
= g_try_malloc(n_bytes
);
72 gpointer g4
= g_try_malloc0(n_bytes
);
73 g3
= g_try_realloc(g3
, n_bytes
* 2); // expected-warning{{Potential leak of memory pointed to by 'g4'}}
74 gpointer g5
= g_malloc_n(n_bytes
, sizeof(char));
75 gpointer g6
= g_malloc0_n(n_bytes
, sizeof(char));
76 g5
= g_realloc_n(g5
, n_bytes
* 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g6'}}
77 gpointer g7
= g_try_malloc_n(n_bytes
, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g5'}}
78 gpointer g8
= g_try_malloc0_n(n_bytes
, sizeof(char));
79 g7
= g_try_realloc_n(g7
, n_bytes
* 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
81 g_free(g1
); // expected-warning{{Potential leak of memory pointed to by 'g7'}}
87 gpointer g1
= g_malloc(n_bytes
);
88 gpointer g2
= g_malloc0(n_bytes
);
89 g1
= g_realloc(g1
, n_bytes
* 2);
90 gpointer g3
= g_try_malloc(n_bytes
);
91 gpointer g4
= g_try_malloc0(n_bytes
);
92 g3
= g_try_realloc(g3
, n_bytes
* 2);
93 gpointer g5
= g_malloc_n(n_bytes
, sizeof(char));
94 gpointer g6
= g_malloc0_n(n_bytes
, sizeof(char));
95 g5
= g_realloc_n(g5
, n_bytes
* 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g6'}}
96 gpointer g7
= g_try_malloc_n(n_bytes
, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g5'}}
97 gpointer g8
= g_try_malloc0_n(n_bytes
, sizeof(char));
98 g7
= g_try_realloc_n(g7
, n_bytes
* 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
100 g_free(g1
); // expected-warning{{Potential leak of memory pointed to by 'g7'}}
107 gpointer g1
= g_malloc(n_bytes
);
108 gpointer g2
= g_malloc0(n_bytes
);
109 g1
= g_realloc(g1
, n_bytes
* 2);
110 gpointer g3
= g_try_malloc(n_bytes
);
111 gpointer g4
= g_try_malloc0(n_bytes
);
112 g3
= g_try_realloc(g3
, n_bytes
* 2);
113 gpointer g5
= g_malloc_n(n_bytes
, sizeof(char));
114 gpointer g6
= g_malloc0_n(n_bytes
, sizeof(char));
115 g5
= g_realloc_n(g5
, n_bytes
* 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g6'}}
116 gpointer g7
= g_try_malloc_n(n_bytes
, sizeof(char));
117 gpointer g8
= g_try_malloc0_n(n_bytes
, sizeof(char));
118 g7
= g_try_realloc_n(g7
, n_bytes
* 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
120 g_free(g1
); // expected-warning{{Potential leak of memory pointed to by 'g7'}}
128 gpointer g1
= g_malloc(n_bytes
);
129 gpointer g2
= g_malloc0(n_bytes
);
130 g1
= g_realloc(g1
, n_bytes
* 2);
131 gpointer g3
= g_try_malloc(n_bytes
);
132 gpointer g4
= g_try_malloc0(n_bytes
);
133 g3
= g_try_realloc(g3
, n_bytes
* 2);
134 gpointer g5
= g_malloc_n(n_bytes
, sizeof(char));
135 gpointer g6
= g_malloc0_n(n_bytes
, sizeof(char));
136 g5
= g_realloc_n(g5
, n_bytes
* 2, sizeof(char));
137 gpointer g7
= g_try_malloc_n(n_bytes
, sizeof(char));
138 gpointer g8
= g_try_malloc0_n(n_bytes
, sizeof(char));
139 g7
= g_try_realloc_n(g7
, n_bytes
* 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
141 g_free(g1
); // expected-warning{{Potential leak of memory pointed to by 'g7'}}
150 gpointer g1
= g_malloc(n_bytes
);
151 gpointer g2
= g_malloc0(n_bytes
);
152 g1
= g_realloc(g1
, n_bytes
* 2);
153 gpointer g3
= g_try_malloc(n_bytes
);
154 gpointer g4
= g_try_malloc0(n_bytes
);
155 g3
= g_try_realloc(g3
, n_bytes
* 2);
156 gpointer g5
= g_malloc_n(n_bytes
, sizeof(char));
157 gpointer g6
= g_malloc0_n(n_bytes
, sizeof(char));
158 g5
= g_realloc_n(g5
, n_bytes
* 2, sizeof(char));
159 gpointer g7
= g_try_malloc_n(n_bytes
, sizeof(char));
160 gpointer g8
= g_try_malloc0_n(n_bytes
, sizeof(char));
161 g7
= g_try_realloc_n(g7
, n_bytes
* 2, sizeof(char)); // expected-warning{{Potential leak of memory pointed to by 'g8'}}
177 test_struct
*s1
= (test_struct
*)g_malloc0(sizeof(test_struct
));
178 test_struct
*s2
= (test_struct
*)g_memdup(s1
, sizeof(test_struct
));
179 gpointer str
= g_strconcat("text", s1
->str
, s2
->str
, NULL
); // no-warning