blob: bc1b58ee0463201e70c3a13908872f28c9abd907 [file] [log] [blame]
Zhongxing Xuc1960952010-06-16 05:38:05 +00001// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-experimental-checks -analyzer-store region -verify %s
2
3typedef __typeof__(sizeof(int)) size_t;
4typedef struct _IO_FILE FILE;
Zhongxing Xu23d90f92010-06-18 02:47:46 +00005#define SEEK_SET 0 /* Seek from beginning of file. */
6#define SEEK_CUR 1 /* Seek from current position. */
7#define SEEK_END 2 /* Seek from end of file. */
8extern FILE *fopen(const char *path, const char *mode);
Zhongxing Xu9843ba92010-07-19 01:52:29 +00009extern int fclose(FILE *fp);
Zhongxing Xu23d90f92010-06-18 02:47:46 +000010extern size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
11extern int fseek (FILE *__stream, long int __off, int __whence);
12extern long int ftell (FILE *__stream);
13extern void rewind (FILE *__stream);
Zhongxing Xuc1960952010-06-16 05:38:05 +000014
15void f1(void) {
16 FILE *p = fopen("foo", "r");
17 char buf[1024];
18 fread(buf, 1, 1, p); // expected-warning {{Stream pointer might be NULL.}}
19}
Zhongxing Xu23d90f92010-06-18 02:47:46 +000020
21void f2(void) {
22 FILE *p = fopen("foo", "r");
23 fseek(p, 1, SEEK_SET); // expected-warning {{Stream pointer might be NULL.}}
24}
25
26void f3(void) {
27 FILE *p = fopen("foo", "r");
28 ftell(p); // expected-warning {{Stream pointer might be NULL.}}
29}
30
31void f4(void) {
32 FILE *p = fopen("foo", "r");
33 rewind(p); // expected-warning {{Stream pointer might be NULL.}}
34}
35
Zhongxing Xu0c2e8c82010-06-24 13:36:41 +000036void f5(void) {
37 FILE *p = fopen("foo", "r");
38 if (!p)
39 return;
40 fseek(p, 1, SEEK_SET); // no-warning
41 fseek(p, 1, 3); // expected-warning {{The whence argument to fseek() should be SEEK_SET, SEEK_END, or SEEK_CUR.}}
42}
Zhongxing Xu9843ba92010-07-19 01:52:29 +000043
44void f6(void) {
45 FILE *p = fopen("foo", "r");
46 fclose(p);
Zhongxing Xuc6a36ff2010-07-19 02:06:14 +000047 fclose(p); // expected-warning {{Try to close a file Descriptor already closed. Cause undefined behaviour.}}
Zhongxing Xu9843ba92010-07-19 01:52:29 +000048}