diff options
| author | Peter Collingbourne <peter@pcc.me.uk> | 2025-07-18 13:26:00 -0700 |
|---|---|---|
| committer | Peter Collingbourne <peter@pcc.me.uk> | 2025-07-18 13:26:00 -0700 |
| commit | 9bf3524731070cadc6175707314f3b6ca37190d5 (patch) | |
| tree | 86dcab7604336b01ae938fe81062c29ff69efba8 /clang/test/Analysis/stream.c | |
| parent | 3a84c15cc13b6daf8e812592898ab6c7f19091a9 (diff) | |
| parent | 4f43f0606c3d7e1ce6d069583b5e59f036e112ce (diff) | |
Created using spr 1.3.6-beta.1
Diffstat (limited to 'clang/test/Analysis/stream.c')
| -rw-r--r-- | clang/test/Analysis/stream.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/clang/test/Analysis/stream.c b/clang/test/Analysis/stream.c index 758b40cca493..10e6e5381ee6 100644 --- a/clang/test/Analysis/stream.c +++ b/clang/test/Analysis/stream.c @@ -519,14 +519,36 @@ void reopen_std_stream(void) { if (!fp) return; stdout = fp; // Let's make them alias. - clang_analyzer_eval(fp == oldStdout); // expected-warning {{UNKNOWN}} - clang_analyzer_eval(fp == stdout); // expected-warning {{TRUE}} no-FALSE - clang_analyzer_eval(oldStdout == stdout); // expected-warning {{UNKNOWN}} + clang_analyzer_eval(fp == oldStdout); // expected-warning {{FALSE}} + clang_analyzer_eval(fp == stdout); // expected-warning {{TRUE}} + clang_analyzer_eval(oldStdout == stdout); // expected-warning {{FALSE}} } void only_success_path_does_not_alias_with_stdout(void) { if (stdout) return; FILE *f = fopen("/tmp/foof", "r"); // no-crash + clang_analyzer_eval(f == 0);// expected-warning {{TRUE}} expected-warning {{FALSE}} if (!f) return; fclose(f); } + +extern void do_something(); + +void test_no_invalidate_at_system_call() { + FILE *old_stdin = stdin; + if ((stdin = fopen("x/y/z", "r")) == NULL) + return; + clang_analyzer_eval(old_stdin == stdin); // expected-warning{{FALSE}} + free(malloc(100)); + clang_analyzer_eval(old_stdin == stdin); // expected-warning{{FALSE}} + fclose(stdin); +} + +void test_invalidate_at_non_system_call() { + FILE *old_stdin = stdin; + if ((stdin = fopen("x/y/z", "r")) == NULL) + return; + clang_analyzer_eval(old_stdin == stdin); // expected-warning{{FALSE}} + do_something(); + clang_analyzer_eval(old_stdin == stdin); // expected-warning{{UNKNOWN}} +} |
