| // RUN: %clang_analyze_cc1 \ | |
| // RUN: -analyzer-checker=core,unix.BlockInCriticalSection \ | |
| // RUN: -analyzer-output text -verify %s | |
| // expected-no-diagnostics | |
| #include "Inputs/system-header-simulator-cxx-std-locks.h" | |
| std::mutex mtx; | |
| using ssize_t = long long; | |
| using size_t = unsigned long long; | |
| int open(const char *__file, int __oflag, ...); | |
| ssize_t read(int fd, void *buf, size_t count); | |
| void close(int fd); | |
| #define O_RDONLY 00 | |
| #define O_NONBLOCK 04000 | |
| void foo() { | |
| std::lock_guard<std::mutex> lock(mtx); | |
| const char *filename = "example.txt"; | |
| int fd = open(filename, O_RDONLY | O_NONBLOCK); | |
| char buffer[200] = {}; | |
| read(fd, buffer, 199); // no-warning: fd is a non-block file descriptor or equals to -1 | |
| close(fd); | |
| } | |
| void foo1(int fd) { | |
| std::lock_guard<std::mutex> lock(mtx); | |
| const char *filename = "example.txt"; | |
| char buffer[200] = {}; | |
| if (fd == -1) | |
| read(fd, buffer, 199); // no-warning: consider file descriptor is a symbol equals to -1 | |
| close(fd); | |
| } |