| // RUN: %clang_analyze_cc1 -verify %s \ |
| // RUN: -analyzer-checker=core \ |
| // RUN: -analyzer-checker=apiModeling.Errno \ |
| // RUN: -analyzer-checker=debug.ErrnoTest \ |
| // RUN: -analyzer-checker=unix.Errno \ |
| // RUN: -analyzer-config unix.Errno:AllowErrnoReadOutsideConditionExpressions=false \ |
| // RUN: -DERRNO_VAR |
| |
| // RUN: %clang_analyze_cc1 -verify %s \ |
| // RUN: -analyzer-checker=core \ |
| // RUN: -analyzer-checker=apiModeling.Errno \ |
| // RUN: -analyzer-checker=debug.ErrnoTest \ |
| // RUN: -analyzer-checker=unix.Errno \ |
| // RUN: -analyzer-config unix.Errno:AllowErrnoReadOutsideConditionExpressions=false \ |
| // RUN: -DERRNO_FUNC |
| |
| #include "Inputs/system-header-simulator.h" |
| #ifdef ERRNO_VAR |
| #include "Inputs/errno_var.h" |
| #endif |
| #ifdef ERRNO_FUNC |
| #include "Inputs/errno_func.h" |
| #endif |
| |
| int ErrnoTesterChecker_setErrnoIfError(); |
| |
| void test_cond() { |
| ErrnoTesterChecker_setErrnoIfError(); |
| int A = errno ? 1 : 2; |
| // expected-warning@-1{{An undefined value may be read from 'errno'}} |
| } |
| |
| void test_errno_store_into_variable() { |
| ErrnoTesterChecker_setErrnoIfError(); |
| int a = errno; |
| // expected-warning@-1{{An undefined value may be read from 'errno'}} |
| } |
| |
| void test_errno_store_into_variable_in_expr() { |
| ErrnoTesterChecker_setErrnoIfError(); |
| int a = 4 + errno; |
| // expected-warning@-1{{An undefined value may be read from 'errno'}} |
| } |
| |
| int test_errno_return() { |
| ErrnoTesterChecker_setErrnoIfError(); |
| return errno; |
| // expected-warning@-1{{An undefined value may be read from 'errno'}} |
| } |
| |
| int test_errno_return_expr() { |
| ErrnoTesterChecker_setErrnoIfError(); |
| return errno > 10; |
| // expected-warning@-1{{An undefined value may be read from 'errno'}} |
| } |