brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 8a3b610 Raw
166 lines · c
1// This test checks that intersecting ranges does not cause 'system is over constrained' assertions in the case of eg: 32 bits unsigned integers getting their range from 64 bits signed integers.2// RUN: %clang_analyze_cc1 -triple x86_64-pc-linux-gnu -analyzer-checker=core,debug.ExprInspection -verify %s3 4void clang_analyzer_warnIfReached(void);5 6void f1(long foo)7{8  unsigned index = -1;9  if (index < foo) index = foo;10  if (index + 1 == 0) // because of foo range, index is in range [0; UINT_MAX]11    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}12  else13    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}14}15 16void f2(unsigned long foo)17{18  int index = -1;19  if (index < foo) index = foo; // index equals ULONG_MAX20  if (index + 1 == 0)21    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}22  else23    clang_analyzer_warnIfReached(); // no-warning24}25 26void f3(unsigned long foo)27{28  unsigned index = -1;29  if (index < foo) index = foo;30  if (index + 1 == 0)31    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}32  else33    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}34}35 36void f4(long foo)37{38  int index = -1;39  if (index < foo) index = foo;40  if (index + 1 == 0)41    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}42  else43    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}44}45 46void f5(long foo)47{48  unsigned index = -1;49  if (index < foo) index = foo;50  if (index == -1)51    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}52  else53    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}54}55 56void f6(long foo)57{58  unsigned index = -1;59  if (index < foo) index = foo;60  if (index == -1)61    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}62  else63    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}64}65 66void f7(long foo)67{68  unsigned index = -1;69  if (index < foo) index = foo;70  if (index - 1 == 0) // Was not reached prior fix.71    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}72  else73    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}74}75 76void f8(long foo)77{78  unsigned index = -1;79  if (index < foo) index = foo;80  if (index + 1L == 0L)81    clang_analyzer_warnIfReached(); // no-warning82  else83    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}84}85 86void f9(long foo)87{88  unsigned index = -1;89  if (index < foo) index = foo;90  if (index - 1L == 0L) // Was not reached prior fix.91    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}92  else93    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}94}95 96void f10(long foo)97{98  unsigned index = -1;99  if (index < foo) index = foo;100  if (index + 1 == 0L)101    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}102  else103    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}104}105 106void f11(long foo)107{108  unsigned index = -1;109  if (index < foo) index = foo;110  if (index + 1UL == 0L)111    clang_analyzer_warnIfReached(); // no-warning112  else113    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}114}115 116void f12(long foo)117{118  unsigned index = -1;119  if (index < foo) index = foo;120  if (index - 1UL == 0L) // Was not reached prior fix.121    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}122  else123    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}124}125 126void f13(int foo)127{128  unsigned short index = -1;129  if (index < foo) index = foo;130  if (index + 1 == 0)131    clang_analyzer_warnIfReached(); // no-warning132  else133    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}134}135 136void f14(long foo)137{138  unsigned index = -1;139  if (index < foo) index = foo;140  long bar = foo;141  if (index + 1 == 0)142    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}143  else144    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}145}146 147void f15(long foo)148{149  unsigned index = -1;150  if (index < foo) index = foo;151  unsigned int tmp = index + 1;152  if (tmp == 0)153    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}154  else155    clang_analyzer_warnIfReached(); // expected-warning{{REACHABLE}}156}157 158int *getIntPtr(void) {159  extern int *intPtr;160  return intPtr;161}162char call_malformed_fptr() {163  int (*fptr)(void) = (int (*)(void))getIntPtr;164  return fptr(); // no-crash165}166