| // RUN: %clang_cc1  -analyze -analyzer-checker=alpha.security.taint,debug.TaintTest %s -verify | 
 | // expected-no-diagnostics | 
 |  | 
 | typedef struct _FILE FILE; | 
 | typedef __typeof(sizeof(int)) size_t; | 
 | extern FILE *stdin; | 
 | typedef long ssize_t; | 
 | ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict); | 
 | int printf(const char * __restrict, ...); | 
 | int snprintf(char *, size_t, const char *, ...); | 
 | void free(void *ptr); | 
 |  | 
 | struct GetLineTestStruct { | 
 |   ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict); | 
 | }; | 
 |  | 
 | void getlineTest(void) { | 
 |   FILE *fp; | 
 |   char *line = 0; | 
 |   size_t len = 0; | 
 |   ssize_t read; | 
 |   struct GetLineTestStruct T; | 
 |  | 
 |   while ((read = T.getline(&line, &len, stdin)) != -1) { | 
 |     printf("%s", line); // no warning | 
 |   } | 
 |   free(line); | 
 | } | 
 |  | 
 | class opaque; | 
 | void testOpaqueClass(opaque *obj) { | 
 |   char buf[20]; | 
 |   snprintf(buf, 20, "%p", obj); // don't crash trying to load *obj | 
 | } | 
 |  |