1b7bdf199SArtem Dergachev // RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage \ 2b7bdf199SArtem Dergachev // RUN: -fsafe-buffer-usage-suggestions \ 3b7bdf199SArtem Dergachev // RUN: -fdiagnostics-parseable-fixits \ 4b7bdf199SArtem Dergachev // RUN: -fsyntax-only %s 2>&1 | FileCheck %s 56a0f2e53Sziqingluo-90 66a0f2e53Sziqingluo-90 // TODO test we don't mess up vertical whitespace 76a0f2e53Sziqingluo-90 // TODO test different whitespaces 86a0f2e53Sziqingluo-90 // TODO test different contexts 96a0f2e53Sziqingluo-90 // when it's on the right side 106a0f2e53Sziqingluo-90 basic()116a0f2e53Sziqingluo-90void basic() { 126a0f2e53Sziqingluo-90 int *ptr; 13*fde4b80cSjkorous-apple // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> " 146a0f2e53Sziqingluo-90 *(ptr+5)=1; 1587b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:5}:"" 1687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:8-[[@LINE-2]]:9}:"[" 1787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:10-[[@LINE-3]]:11}:"]" 186a0f2e53Sziqingluo-90 } 196a0f2e53Sziqingluo-90 206a0f2e53Sziqingluo-90 // The weird preceding semicolon ensures that we preserve that range intact. char_ranges()216a0f2e53Sziqingluo-90void char_ranges() { 226a0f2e53Sziqingluo-90 int *p; 23*fde4b80cSjkorous-apple // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> " 246a0f2e53Sziqingluo-90 256a0f2e53Sziqingluo-90 ;* ( p + 5 ) = 1; 2687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:8}:"" 2787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:9-[[@LINE-2]]:12}:"[" 2887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:13-[[@LINE-3]]:15}:"]" 296a0f2e53Sziqingluo-90 306a0f2e53Sziqingluo-90 ;* (p+5)= 1; 3187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:9}:"" 3287b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:10-[[@LINE-2]]:11}:"[" 3387b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:12-[[@LINE-3]]:13}:"]" 346a0f2e53Sziqingluo-90 356a0f2e53Sziqingluo-90 ;*( p+5)= 1; 3687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:9}:"" 3787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:10-[[@LINE-2]]:11}:"[" 3887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:12-[[@LINE-3]]:13}:"]" 396a0f2e53Sziqingluo-90 406a0f2e53Sziqingluo-90 ;*( p+5)= 1; 4187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:9}:"" 4287b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:10-[[@LINE-2]]:11}:"[" 4387b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:12-[[@LINE-3]]:13}:"]" 446a0f2e53Sziqingluo-90 456a0f2e53Sziqingluo-90 ;*( p +5)= 1; 4687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:7}:"" 4787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:8-[[@LINE-2]]:12}:"[" 4887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:13-[[@LINE-3]]:14}:"]" 496a0f2e53Sziqingluo-90 506a0f2e53Sziqingluo-90 ;*(p+ 5)= 1; 5187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 5287b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:11}:"[" 5387b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:12-[[@LINE-3]]:13}:"]" 546a0f2e53Sziqingluo-90 556a0f2e53Sziqingluo-90 ;*(p+ 5 )= 1; 5687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 5787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:9}:"[" 5887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:10-[[@LINE-3]]:14}:"]" 596a0f2e53Sziqingluo-90 606a0f2e53Sziqingluo-90 ;*(p+ 5) = 1; 6187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 6287b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:9}:"[" 6387b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:10-[[@LINE-3]]:11}:"]" 646a0f2e53Sziqingluo-90 656a0f2e53Sziqingluo-90 ; *(p+5)= 1; 6687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:7-[[@LINE-1]]:9}:"" 6787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:10-[[@LINE-2]]:11}:"[" 6887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:12-[[@LINE-3]]:13}:"]" 696a0f2e53Sziqingluo-90 706a0f2e53Sziqingluo-90 ;*(p+123456)= 1; 7187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 7287b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:8}:"[" 7387b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:14-[[@LINE-3]]:15}:"]" 746a0f2e53Sziqingluo-90 756a0f2e53Sziqingluo-90 ;* (p+123456)= 1; 7687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:9}:"" 7787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:10-[[@LINE-2]]:11}:"[" 7887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:17-[[@LINE-3]]:18}:"]" 796a0f2e53Sziqingluo-90 806a0f2e53Sziqingluo-90 ;*( p+123456)= 1; 8187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:9}:"" 8287b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:10-[[@LINE-2]]:11}:"[" 8387b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:17-[[@LINE-3]]:18}:"]" 846a0f2e53Sziqingluo-90 856a0f2e53Sziqingluo-90 ;*( p+123456)= 1; 8687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:9}:"" 8787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:10-[[@LINE-2]]:11}:"[" 8887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:17-[[@LINE-3]]:18}:"]" 896a0f2e53Sziqingluo-90 906a0f2e53Sziqingluo-90 ;*(p +123456)= 1; 9187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 9287b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:11}:"[" 9387b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:17-[[@LINE-3]]:18}:"]" 946a0f2e53Sziqingluo-90 956a0f2e53Sziqingluo-90 ;*(p+ 123456)= 1; 9687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 9787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:11}:"[" 9887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:17-[[@LINE-3]]:18}:"]" 996a0f2e53Sziqingluo-90 1006a0f2e53Sziqingluo-90 ;*(p+123456 )= 1; 10187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 10287b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:8}:"[" 10387b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:14-[[@LINE-3]]:18}:"]" 1046a0f2e53Sziqingluo-90 1056a0f2e53Sziqingluo-90 ;*(p+123456) = 1; 10687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 10787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:8}:"[" 10887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:14-[[@LINE-3]]:15}:"]" 1096a0f2e53Sziqingluo-90 1106a0f2e53Sziqingluo-90 int *ptrrrrrr; 111*fde4b80cSjkorous-apple // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"std::span<int> " 1126a0f2e53Sziqingluo-90 1136a0f2e53Sziqingluo-90 ;* ( ptrrrrrr + 123456 )= 1; 11487b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:8}:"" 11587b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:16-[[@LINE-2]]:19}:"[" 11687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:25-[[@LINE-3]]:27}:"]" 1176a0f2e53Sziqingluo-90 1186a0f2e53Sziqingluo-90 ;* (ptrrrrrr+123456)= 1; 11987b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:9}:"" 12087b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:17-[[@LINE-2]]:18}:"[" 12187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:24-[[@LINE-3]]:25}:"]" 1226a0f2e53Sziqingluo-90 1236a0f2e53Sziqingluo-90 ;*( ptrrrrrr+123456)= 1; 12487b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:9}:"" 12587b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:17-[[@LINE-2]]:18}:"[" 12687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:24-[[@LINE-3]]:25}:"]" 1276a0f2e53Sziqingluo-90 1286a0f2e53Sziqingluo-90 ;*( ptrrrrrr+123456)= 1; 12987b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:9}:"" 13087b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:17-[[@LINE-2]]:18}:"[" 13187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:24-[[@LINE-3]]:25}:"]" 1326a0f2e53Sziqingluo-90 1336a0f2e53Sziqingluo-90 ;*(ptrrrrrr +123456)= 1; 13487b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 13587b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:14-[[@LINE-2]]:18}:"[" 13687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:24-[[@LINE-3]]:25}:"]" 1376a0f2e53Sziqingluo-90 1386a0f2e53Sziqingluo-90 ;*(ptrrrrrr+ 123456)= 1; 13987b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 14087b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:14-[[@LINE-2]]:18}:"[" 14187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:24-[[@LINE-3]]:25}:"]" 1426a0f2e53Sziqingluo-90 1436a0f2e53Sziqingluo-90 ;*(ptrrrrrr+123456 )= 1; 14487b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 14587b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:14-[[@LINE-2]]:15}:"[" 14687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:21-[[@LINE-3]]:25}:"]" 1476a0f2e53Sziqingluo-90 1486a0f2e53Sziqingluo-90 ;*(ptrrrrrr+123456) = 1; 14987b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:4-[[@LINE-1]]:6}:"" 15087b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:14-[[@LINE-2]]:15}:"[" 15187b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:21-[[@LINE-3]]:22}:"]" 1526a0f2e53Sziqingluo-90 } 1536a0f2e53Sziqingluo-90 base_on_rhs()1546a0f2e53Sziqingluo-90void base_on_rhs() { 1556a0f2e53Sziqingluo-90 int* ptr; 1566a0f2e53Sziqingluo-90 *(10 + ptr) = 1; 15787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:5}:"" 15887b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:7-[[@LINE-2]]:10}:"[" 15987b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:13-[[@LINE-3]]:14}:"]" 1606a0f2e53Sziqingluo-90 } 1616a0f2e53Sziqingluo-90 many_parens()1626a0f2e53Sziqingluo-90void many_parens() { 1636a0f2e53Sziqingluo-90 int* ptr; 1646a0f2e53Sziqingluo-90 *(( (10 + ptr)) ) = 1; 16587b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:8}:"" 16687b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:10-[[@LINE-2]]:13}:"[" 16787b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:16-[[@LINE-3]]:20}:"]" 1686a0f2e53Sziqingluo-90 } 1696a0f2e53Sziqingluo-90 lvaue_to_rvalue()1706a0f2e53Sziqingluo-90void lvaue_to_rvalue() { 1716a0f2e53Sziqingluo-90 int * ptr; 1726a0f2e53Sziqingluo-90 int tmp = *(ptr + 10); 17387b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:13-[[@LINE-1]]:15}:"" 17487b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-2]]:18-[[@LINE-2]]:21}:"[" 17587b8c85bSRashmi Mudduluru // CHECK: fix-it:"{{.*}}":{[[@LINE-3]]:23-[[@LINE-3]]:24}:"]" 1766a0f2e53Sziqingluo-90 } 1776a0f2e53Sziqingluo-90 1786a0f2e53Sziqingluo-90 // Fixits emitted for the cases below would be incorrect. 1796a0f2e53Sziqingluo-90 // CHECK-NOT: fix-it: 1806a0f2e53Sziqingluo-90 // Array subsctipt opertor of std::span accepts unsigned integer. negative()1816a0f2e53Sziqingluo-90void negative() { 1826a0f2e53Sziqingluo-90 int* ptr; 1836a0f2e53Sziqingluo-90 *(ptr + -5) = 1; // skip 1846a0f2e53Sziqingluo-90 } 1856a0f2e53Sziqingluo-90 subtraction()1866a0f2e53Sziqingluo-90void subtraction() { 1876a0f2e53Sziqingluo-90 int* ptr; 1886a0f2e53Sziqingluo-90 *(ptr - 5) = 1; // skip 1896a0f2e53Sziqingluo-90 } 1906a0f2e53Sziqingluo-90 subtraction_of_negative()1916a0f2e53Sziqingluo-90void subtraction_of_negative() { 1926a0f2e53Sziqingluo-90 int* ptr; 1936a0f2e53Sziqingluo-90 *(ptr - -5) = 1; // FIXME: implement fixit (uncommon case - low priority) 1946a0f2e53Sziqingluo-90 } 1956a0f2e53Sziqingluo-90 1966a0f2e53Sziqingluo-90 bindingDecl(int * p,int * q)1976a0f2e53Sziqingluo-90void bindingDecl(int *p, int *q) { 1986a0f2e53Sziqingluo-90 int * a[2] = {p, q}; 1996a0f2e53Sziqingluo-90 auto [x, y] = a; 2006a0f2e53Sziqingluo-90 2016a0f2e53Sziqingluo-90 *(x + 1) = 1; // FIXME: deal with `BindingDecl`s 2026a0f2e53Sziqingluo-90 } 203