// 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 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 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); }