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érivoid 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érivoid 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érivoid 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ériint 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ériint 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