128 lines · c
1// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -verify %s -DTEST_CORRECT2// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -verify %s -DTEST_GETLINE_13// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -verify %s -DTEST_GETLINE_24// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -verify %s -DTEST_GETLINE_35// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -verify %s -DTEST_GETLINE_46// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -verify %s -DTEST_GETLINE_57// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -verify %s -DTEST_GETLINE_GH1448848 9// emulator of "system-header-simulator.h" because of redefinition of 'getline' function10typedef struct _FILE FILE;11typedef __typeof(sizeof(int)) size_t;12typedef long ssize_t;13#define NULL 014 15int fclose(FILE *fp);16FILE *tmpfile(void);17 18#ifdef TEST_CORRECT19ssize_t getline(char **lineptr, size_t *n, FILE *stream);20ssize_t getdelim(char **lineptr, size_t *n, int delimiter, FILE *stream);21 22void test_correct() {23 FILE *F1 = tmpfile();24 if (!F1)25 return;26 char *buffer = NULL;27 getline(&buffer, NULL, F1); // expected-warning {{Size pointer might be NULL}}28 fclose(F1);29}30 31void test_delim_correct() {32 FILE *F1 = tmpfile();33 if (!F1)34 return;35 char *buffer = NULL;36 getdelim(&buffer, NULL, ',', F1); // expected-warning {{Size pointer might be NULL}}37 fclose(F1);38}39#endif40 41#ifdef TEST_GETLINE_142// expected-no-diagnostics43ssize_t getline(int lineptr);44 45void test() {46 FILE *F1 = tmpfile();47 if (!F1)48 return;49 int buffer = 0;50 getline(buffer);51 fclose(F1);52}53#endif54 55#ifdef TEST_GETLINE_256ssize_t getline(char **lineptr, size_t *n);57 58void test() {59 FILE *F1 = tmpfile();60 if (!F1)61 return;62 char *buffer = NULL;63 getline(&buffer, NULL); // expected-warning {{Size pointer might be NULL}}64 fclose(F1);65}66#endif67 68#ifdef TEST_GETLINE_369// expected-no-diagnostics70ssize_t getline(char **lineptr, size_t n, FILE *stream);71 72void test() {73 FILE *F1 = tmpfile();74 if (!F1)75 return;76 char *buffer = NULL;77 getline(&buffer, 0, F1);78 fclose(F1);79}80#endif81 82#ifdef TEST_GETLINE_483ssize_t getline(char **lineptr, size_t *n, int stream);84ssize_t getdelim(char **lineptr, size_t *n, int delimiter, int stream);85 86void test() {87 FILE *F1 = tmpfile();88 if (!F1)89 return;90 char *buffer = NULL;91 getline(&buffer, NULL, 1); // expected-warning {{Size pointer might be NULL}}92 fclose(F1);93}94 95void test_delim() {96 FILE *F1 = tmpfile();97 if (!F1)98 return;99 char *buffer = NULL;100 getdelim(&buffer, NULL, ',', 1); // expected-warning {{Size pointer might be NULL}}101 fclose(F1);102}103#endif104 105#ifdef TEST_GETLINE_5106ssize_t getdelim(char **lineptr, size_t *n, const char* delimiter, FILE *stream);107 108void test_delim() {109 FILE *F1 = tmpfile();110 if (!F1)111 return;112 char *buffer = NULL;113 getdelim(&buffer, NULL, ",", F1); // expected-warning {{Size pointer might be NULL}}114 fclose(F1);115}116#endif117 118#ifdef TEST_GETLINE_GH144884119// expected-no-diagnostics120struct AW_string {};121void getline(int *, struct AW_string);122void top() {123 struct AW_string line;124 int getline_file_info;125 getline(&getline_file_info, line);126}127#endif128