| // RUN: %clang_analyze_cc1 -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 |
| } |
| |