blob: e9fb8fdebfabb757eb1f4e221dda2573c6f4c665 [file] [log] [blame]
Balázs Kéri11bd3e52020-04-08 08:52:24 +02001// RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-checker=debug.StreamTester,debug.ExprInspection -analyzer-store region -verify %s
2
3#include "Inputs/system-header-simulator.h"
4
5void clang_analyzer_eval(int);
6void StreamTesterChecker_make_feof_stream(FILE *);
7void StreamTesterChecker_make_ferror_stream(FILE *);
8
9void error_fopen() {
10 FILE *F = fopen("file", "r");
11 if (!F)
12 return;
13 clang_analyzer_eval(feof(F)); // expected-warning {{FALSE}}
14 clang_analyzer_eval(ferror(F)); // expected-warning {{FALSE}}
15 fclose(F);
16}
17
18void error_freopen() {
19 FILE *F = fopen("file", "r");
20 if (!F)
21 return;
22 F = freopen(0, "w", F);
23 if (!F)
24 return;
25 clang_analyzer_eval(feof(F)); // expected-warning {{FALSE}}
26 clang_analyzer_eval(ferror(F)); // expected-warning {{FALSE}}
27 fclose(F);
28}
29
30void stream_error_feof() {
31 FILE *F = fopen("file", "r");
32 if (!F)
33 return;
34 StreamTesterChecker_make_feof_stream(F);
35 clang_analyzer_eval(feof(F)); // expected-warning {{TRUE}}
36 clang_analyzer_eval(ferror(F)); // expected-warning {{FALSE}}
37 clearerr(F);
38 clang_analyzer_eval(feof(F)); // expected-warning {{FALSE}}
39 clang_analyzer_eval(ferror(F)); // expected-warning {{FALSE}}
40 fclose(F);
41}
42
43void stream_error_ferror() {
44 FILE *F = fopen("file", "r");
45 if (!F)
46 return;
47 StreamTesterChecker_make_ferror_stream(F);
48 clang_analyzer_eval(feof(F)); // expected-warning {{FALSE}}
49 clang_analyzer_eval(ferror(F)); // expected-warning {{TRUE}}
50 clearerr(F);
51 clang_analyzer_eval(feof(F)); // expected-warning {{FALSE}}
52 clang_analyzer_eval(ferror(F)); // expected-warning {{FALSE}}
53 fclose(F);
54}