1cdc3a89d5de90b2299c56f4a46c3de590c5184d1Ted Kremenek// RUN: %clang_cc1  -analyze -analyzer-checker=alpha.security.taint,debug.TaintTest %s -verify
28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
3b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks
4b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zakstypedef struct _FILE FILE;
5b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zakstypedef __typeof(sizeof(int)) size_t;
6b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksextern FILE *stdin;
7b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zakstypedef long ssize_t;
8b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict);
9bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Roseint printf(const char * __restrict, ...);
10bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Roseint snprintf(char *, size_t, const char *, ...);
11b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksvoid free(void *ptr);
12b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks
13b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksstruct GetLineTestStruct {
14b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks  ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict);
15b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks};
16b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks
17b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaksvoid getlineTest(void) {
18b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks  FILE *fp;
19b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks  char *line = 0;
20b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks  size_t len = 0;
21b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks  ssize_t read;
22b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks  struct GetLineTestStruct T;
23b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks
24b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks  while ((read = T.getline(&line, &len, stdin)) != -1) {
25b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks    printf("%s", line); // no warning
26b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks  }
27b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks  free(line);
28b9ac30cf9ec001fd0d63ffc44289a333a21e691dAnna Zaks}
29bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose
30bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Roseclass opaque;
31bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rosevoid testOpaqueClass(opaque *obj) {
32bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose  char buf[20];
33bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose  snprintf(buf, 20, "%p", obj); // don't crash trying to load *obj
34bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose}
35bf3d71e85f7449161a414c2ec3410e60394bf38aJordan Rose
36