// 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
}

