brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 5db96a4 Raw
63 lines · c
1// RUN: %clang_analyze_cc1 -verify -analyzer-output text %s \2// RUN:   -analyzer-checker=core \3// RUN:   -analyzer-checker=apiModeling.Errno \4// RUN:   -analyzer-checker=debug.ExprInspection \5// RUN:   -analyzer-checker=debug.ErrnoTest \6// RUN:   -analyzer-checker=unix.Errno \7// RUN:   -DERRNO_VAR8 9// RUN: %clang_analyze_cc1 -verify -analyzer-output text %s \10// RUN:   -analyzer-checker=core \11// RUN:   -analyzer-checker=apiModeling.Errno \12// RUN:   -analyzer-checker=debug.ExprInspection \13// RUN:   -analyzer-checker=debug.ErrnoTest \14// RUN:   -analyzer-checker=unix.Errno \15// RUN:   -DERRNO_FUNC16 17#include "Inputs/errno_var.h"18#include "Inputs/system-header-simulator.h"19#ifdef ERRNO_VAR20#include "Inputs/errno_var.h"21#endif22#ifdef ERRNO_FUNC23#include "Inputs/errno_func.h"24#endif25 26int ErrnoTesterChecker_setErrnoCheckState();27 28void something();29 30void testErrnoCheckUndefRead() {31  int X = ErrnoTesterChecker_setErrnoCheckState();32  something();33  X = ErrnoTesterChecker_setErrnoCheckState(); // expected-note{{Assuming that this function succeeds but sets 'errno' to an unspecified value}}34  if (X == 0) {                                // expected-note{{'X' is equal to 0}}35                                               // expected-note@-1{{Taking true branch}}36    if (errno) {37    } // expected-warning@-1{{An undefined value may be read from 'errno'}}38      // expected-note@-2{{An undefined value may be read from 'errno'}}39  }40}41 42void testErrnoCheckOverwrite() {43  int X = ErrnoTesterChecker_setErrnoCheckState();44  something();45  X = ErrnoTesterChecker_setErrnoCheckState(); // expected-note{{Assuming that this function returns 2. 'errno' should be checked to test for failure}}46  if (X == 2) {                                // expected-note{{'X' is equal to 2}}47                                               // expected-note@-1{{Taking true branch}}48    errno = 0;                                 // expected-warning{{Value of 'errno' was not checked and is overwritten here}}49                                               // expected-note@-1{{Value of 'errno' was not checked and is overwritten here}}50  }51}52 53void testErrnoCheckOverwriteStdCall() {54  int X = ErrnoTesterChecker_setErrnoCheckState();55  something();56  X = ErrnoTesterChecker_setErrnoCheckState(); // expected-note{{Assuming that this function returns 2. 'errno' should be checked to test for failure}}57  if (X == 2) {                                // expected-note{{'X' is equal to 2}}58                                               // expected-note@-1{{Taking true branch}}59    printf("");                                // expected-warning{{Value of 'errno' was not checked and may be overwritten by function 'printf'}}60                                               // expected-note@-1{{Value of 'errno' was not checked and may be overwritten by function 'printf'}}61  }62}63