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