1cdc3a89d5de90b2299c56f4a46c3de590c5184d1Ted Kremenek// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.unix,core.uninitialized -analyzer-store=region -verify %s
2a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xutypedef __typeof(sizeof(int)) size_t;
3a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xuvoid *malloc(size_t);
4a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xuvoid free(void *);
5a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu
6a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xuchar stackBased1 () {
7a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  char buf[2];
8a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  buf[0] = 'a';
9a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  return buf[1]; // expected-warning{{Undefined}}
10a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu}
11a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu
12a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xuchar stackBased2 () {
13a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  char buf[2];
14a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  buf[1] = 'a';
15a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  return buf[0]; // expected-warning{{Undefined}}
16a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu}
17a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu
187a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks// Exercise the conditional visitor. Radar://10105448
197a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zakschar stackBased3 (int *x) {
207a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks  char buf[2];
217a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks  int *y;
227a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks  buf[0] = 'a';
237a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks  if (!(y = x)) {
247a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks    return buf[1]; // expected-warning{{Undefined}}
257a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks  }
267a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks  return buf[0];
277a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks}
287a756463ffe90f9a06c8cc8c190f22a5e4366c25Anna Zaks
29a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xuchar heapBased1 () {
30a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  char *buf = malloc(2);
31a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  buf[0] = 'a';
32a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  char result = buf[1]; // expected-warning{{undefined}}
33a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  free(buf);
34a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  return result;
35a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu}
36a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu
37a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xuchar heapBased2 () {
38a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  char *buf = malloc(2);
39a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  buf[1] = 'a';
40a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  char result = buf[0]; // expected-warning{{undefined}}
41a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  free(buf);
42a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu  return result;
43a5ce966d1a23d84aa5e849cf0ed62494e736ea6aZhongxing Xu}
44