1cdc3a89d5de90b2299c56f4a46c3de590c5184d1Ted Kremenek// RUN: %clang_cc1 -verify -analyze -analyzer-checker=core,alpha.security.ArrayBound -analyzer-store=region %s 214553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenek 314553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenekstruct tea_cheese { unsigned magic; }; 414553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenektypedef struct tea_cheese kernel_tea_cheese_t; 514553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenekextern kernel_tea_cheese_t _wonky_gesticulate_cheese; 614553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenek 714553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenek// This test case exercises the ElementRegion::getRValueType() logic. 814553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenek 9ab6d6229cd7659ee49974d0116fe8bca06d7d128Ted Kremenekvoid test1( void ) { 1014553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenek kernel_tea_cheese_t *wonky = &_wonky_gesticulate_cheese; 1114553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenek struct load_wine *cmd = (void*) &wonky[1]; 12ef52bcb606c73950139a775af61495f63fbc3603Tom Care cmd = cmd; 1314553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenek char *p = (void*) &wonky[1]; 14ccb161603c3c280c378e6701986e9f3646898277Zhongxing Xu kernel_tea_cheese_t *q = &wonky[1]; 1539abcdf1c7dfc4fd2bda57416812672830400c9eTed Kremenek // This test case tests both the RegionStore logic (doesn't crash) and 1639abcdf1c7dfc4fd2bda57416812672830400c9eTed Kremenek // the out-of-bounds checking. We don't expect the warning for now since 1739abcdf1c7dfc4fd2bda57416812672830400c9eTed Kremenek // out-of-bound checking is temporarily disabled. 1858e689fead1490611bcd114fb707bfc08a12049eZhongxing Xu kernel_tea_cheese_t r = *q; // expected-warning{{Access out-of-bound array element (buffer overflow)}} 1914553abd17d303b0b310b3ab1523eb0d30d8121cTed Kremenek} 20ab6d6229cd7659ee49974d0116fe8bca06d7d128Ted Kremenek 21ab6d6229cd7659ee49974d0116fe8bca06d7d128Ted Kremenekvoid test1_b( void ) { 22ab6d6229cd7659ee49974d0116fe8bca06d7d128Ted Kremenek kernel_tea_cheese_t *wonky = &_wonky_gesticulate_cheese; 23ab6d6229cd7659ee49974d0116fe8bca06d7d128Ted Kremenek struct load_wine *cmd = (void*) &wonky[1]; 24ef52bcb606c73950139a775af61495f63fbc3603Tom Care cmd = cmd; 25ab6d6229cd7659ee49974d0116fe8bca06d7d128Ted Kremenek char *p = (void*) &wonky[1]; 26ab6d6229cd7659ee49974d0116fe8bca06d7d128Ted Kremenek *p = 1; // expected-warning{{Access out-of-bound array element (buffer overflow)}} 27ab6d6229cd7659ee49974d0116fe8bca06d7d128Ted Kremenek} 28