Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
clang/test/Analysis/stream-error.c
// RUN: %clang_analyze_cc1 -verify %s \ | // RUN: %clang_analyze_cc1 -verify %s \ | ||||
// RUN: -analyzer-checker=core \ | // RUN: -analyzer-checker=core \ | ||||
// RUN: -analyzer-checker=alpha.unix.Stream \ | // RUN: -analyzer-checker=alpha.unix.Stream \ | ||||
// RUN: -analyzer-checker=debug.StreamTester \ | // RUN: -analyzer-checker=debug.StreamTester \ | ||||
// RUN: -analyzer-checker=debug.ExprInspection | // RUN: -analyzer-checker=debug.ExprInspection | ||||
#include "Inputs/system-header-simulator.h" | #include "Inputs/system-header-simulator.h" | ||||
void clang_analyzer_eval(int); | void clang_analyzer_eval(int); | ||||
void clang_analyzer_dump(int); | |||||
void clang_analyzer_warnIfReached(void); | void clang_analyzer_warnIfReached(void); | ||||
void StreamTesterChecker_make_feof_stream(FILE *); | void StreamTesterChecker_make_feof_stream(FILE *); | ||||
void StreamTesterChecker_make_ferror_stream(FILE *); | void StreamTesterChecker_make_ferror_stream(FILE *); | ||||
void error_fopen(void) { | void error_fopen(void) { | ||||
FILE *F = fopen("file", "r"); | FILE *F = fopen("file", "r"); | ||||
if (!F) | if (!F) | ||||
return; | return; | ||||
▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | if (Ret == 10) { | ||||
clang_analyzer_eval(ferror(F)); // expected-warning {{TRUE}} | clang_analyzer_eval(ferror(F)); // expected-warning {{TRUE}} | ||||
fwrite(0, 1, 10, F); // expected-warning {{might be 'indeterminate'}} | fwrite(0, 1, 10, F); // expected-warning {{might be 'indeterminate'}} | ||||
} | } | ||||
fclose(F); | fclose(F); | ||||
Ret = fwrite(0, 1, 10, F); // expected-warning {{Stream might be already closed}} | Ret = fwrite(0, 1, 10, F); // expected-warning {{Stream might be already closed}} | ||||
} | } | ||||
void freadwrite_zerosize(FILE *F) { | void freadwrite_zerosize(FILE *F) { | ||||
fwrite(0, 1, 0, F); | size_t Ret; | ||||
fwrite(0, 0, 1, F); | Ret = fwrite(0, 1, 0, F); | ||||
fread(0, 1, 0, F); | clang_analyzer_dump(Ret); // expected-warning {{0 }} | ||||
fread(0, 0, 1, F); | Ret = fwrite(0, 0, 1, F); | ||||
clang_analyzer_dump(Ret); // expected-warning {{0 }} | |||||
Ret = fread(0, 1, 0, F); | |||||
clang_analyzer_dump(Ret); // expected-warning {{0 }} | |||||
Ret = fread(0, 0, 1, F); | |||||
clang_analyzer_dump(Ret); // expected-warning {{0 }} | |||||
} | } | ||||
void freadwrite_zerosize_eofstate(FILE *F) { | void freadwrite_zerosize_eofstate(FILE *F) { | ||||
fwrite(0, 1, 0, F); | fwrite(0, 1, 0, F); | ||||
fwrite(0, 0, 1, F); | fwrite(0, 0, 1, F); | ||||
fread(0, 1, 0, F); // expected-warning {{Read function called when stream is in EOF state}} | fread(0, 1, 0, F); // expected-warning {{Read function called when stream is in EOF state}} | ||||
fread(0, 0, 1, F); // expected-warning {{Read function called when stream is in EOF state}} | fread(0, 0, 1, F); // expected-warning {{Read function called when stream is in EOF state}} | ||||
} | } | ||||
▲ Show 20 Lines • Show All 120 Lines • Show Last 20 Lines |