35 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=optin.taint,debug.TaintTest %s -verify2// expected-no-diagnostics3 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 warning26 }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 *obj34}35