xref: /llvm-project/clang/test/Analysis/errno-options.c (revision 72d3bf2b87ff7fab1a189d76f516bc03eac3271d)
160f3b071SBalázs Kéri // RUN: %clang_analyze_cc1 -verify %s \
260f3b071SBalázs Kéri // RUN:   -analyzer-checker=core \
360f3b071SBalázs Kéri // RUN:   -analyzer-checker=apiModeling.Errno \
460f3b071SBalázs Kéri // RUN:   -analyzer-checker=debug.ErrnoTest \
5*72d3bf2bSBalázs Kéri // RUN:   -analyzer-checker=unix.Errno \
6*72d3bf2bSBalázs Kéri // RUN:   -analyzer-config unix.Errno:AllowErrnoReadOutsideConditionExpressions=false \
760f3b071SBalázs Kéri // RUN:   -DERRNO_VAR
860f3b071SBalázs Kéri 
960f3b071SBalázs Kéri // RUN: %clang_analyze_cc1 -verify %s \
1060f3b071SBalázs Kéri // RUN:   -analyzer-checker=core \
1160f3b071SBalázs Kéri // RUN:   -analyzer-checker=apiModeling.Errno \
1260f3b071SBalázs Kéri // RUN:   -analyzer-checker=debug.ErrnoTest \
13*72d3bf2bSBalázs Kéri // RUN:   -analyzer-checker=unix.Errno \
14*72d3bf2bSBalázs Kéri // RUN:   -analyzer-config unix.Errno:AllowErrnoReadOutsideConditionExpressions=false \
1560f3b071SBalázs Kéri // RUN:   -DERRNO_FUNC
1660f3b071SBalázs Kéri 
1760f3b071SBalázs Kéri #include "Inputs/system-header-simulator.h"
1860f3b071SBalázs Kéri #ifdef ERRNO_VAR
1960f3b071SBalázs Kéri #include "Inputs/errno_var.h"
2060f3b071SBalázs Kéri #endif
2160f3b071SBalázs Kéri #ifdef ERRNO_FUNC
2260f3b071SBalázs Kéri #include "Inputs/errno_func.h"
2360f3b071SBalázs Kéri #endif
2460f3b071SBalázs Kéri 
2560f3b071SBalázs Kéri int ErrnoTesterChecker_setErrnoIfError();
2660f3b071SBalázs Kéri 
test_cond()2760f3b071SBalázs Kéri void test_cond() {
2860f3b071SBalázs Kéri   ErrnoTesterChecker_setErrnoIfError();
2960f3b071SBalázs Kéri   int A = errno ? 1 : 2;
3060f3b071SBalázs Kéri   // expected-warning@-1{{An undefined value may be read from 'errno'}}
3160f3b071SBalázs Kéri }
3260f3b071SBalázs Kéri 
test_errno_store_into_variable()3360f3b071SBalázs Kéri void test_errno_store_into_variable() {
3460f3b071SBalázs Kéri   ErrnoTesterChecker_setErrnoIfError();
3560f3b071SBalázs Kéri   int a = errno;
3660f3b071SBalázs Kéri   // expected-warning@-1{{An undefined value may be read from 'errno'}}
3760f3b071SBalázs Kéri }
3860f3b071SBalázs Kéri 
test_errno_store_into_variable_in_expr()3960f3b071SBalázs Kéri void test_errno_store_into_variable_in_expr() {
4060f3b071SBalázs Kéri   ErrnoTesterChecker_setErrnoIfError();
4160f3b071SBalázs Kéri   int a = 4 + errno;
4260f3b071SBalázs Kéri   // expected-warning@-1{{An undefined value may be read from 'errno'}}
4360f3b071SBalázs Kéri }
4460f3b071SBalázs Kéri 
test_errno_return()4560f3b071SBalázs Kéri int test_errno_return() {
4660f3b071SBalázs Kéri   ErrnoTesterChecker_setErrnoIfError();
4760f3b071SBalázs Kéri   return errno;
4860f3b071SBalázs Kéri   // expected-warning@-1{{An undefined value may be read from 'errno'}}
4960f3b071SBalázs Kéri }
5060f3b071SBalázs Kéri 
test_errno_return_expr()5160f3b071SBalázs Kéri int test_errno_return_expr() {
5260f3b071SBalázs Kéri   ErrnoTesterChecker_setErrnoIfError();
5360f3b071SBalázs Kéri   return errno > 10;
5460f3b071SBalázs Kéri   // expected-warning@-1{{An undefined value may be read from 'errno'}}
5560f3b071SBalázs Kéri }
56