14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 %s -verify -fsyntax-only -triple x86_64-pc-linux-gnu 20e2c34f92f00628d48968dfea096d36381f494cbStephen Hinestypedef unsigned long long uint64_t; 34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartypedef unsigned int uint32_t; 44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Check integer sizes. 64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint array64[sizeof(uint64_t) == 8 ? 1 : -1]; 74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint array32[sizeof(uint32_t) == 4 ? 1 : -1]; 84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint arrayint[sizeof(int) < sizeof(uint64_t) ? 1 : -1]; 90e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 100e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesuint64_t f0(uint64_t); 110e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesuint64_t f1(uint64_t, uint32_t); 120e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesuint64_t f2(uint64_t, ...); 130e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 140e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstatic const uint64_t overflow = 1 * 4608 * 1024 * 1024; // expected-warning {{overflow in expression; result is 536870912 with type 'int'}} 150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 160e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesuint64_t check_integer_overflows(int i) { 170e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 180e2c34f92f00628d48968dfea096d36381f494cbStephen Hines uint64_t overflow = 4608 * 1024 * 1024, 190e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 200e2c34f92f00628d48968dfea096d36381f494cbStephen Hines overflow2 = (uint64_t)(4608 * 1024 * 1024), 210e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 220e2c34f92f00628d48968dfea096d36381f494cbStephen Hines overflow3 = (uint64_t)(4608 * 1024 * 1024 * i), 230e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 240e2c34f92f00628d48968dfea096d36381f494cbStephen Hines overflow4 = (1ULL * ((4608) * ((1024) * (1024))) + 2ULL), 250e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 2{{overflow in expression; result is 536870912 with type 'int'}} 260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines multi_overflow = (uint64_t)((uint64_t)(4608 * 1024 * 1024) * (uint64_t)(4608 * 1024 * 1024)); 270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 290e2c34f92f00628d48968dfea096d36381f494cbStephen Hines overflow += overflow2 = overflow3 = (uint64_t)(4608 * 1024 * 1024); 300e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines overflow += overflow2 = overflow3 = 4608 * 1024 * 1024; 320e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 330e2c34f92f00628d48968dfea096d36381f494cbStephen Hines uint64_t not_overflow = 4608 * 1024 * 1024ULL; 340e2c34f92f00628d48968dfea096d36381f494cbStephen Hines uint64_t not_overflow2 = (1ULL * ((uint64_t)(4608) * (1024 * 1024)) + 2ULL); 350e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 360e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 2{{overflow in expression; result is 536870912 with type 'int'}} 370e2c34f92f00628d48968dfea096d36381f494cbStephen Hines overflow = 4608 * 1024 * 1024 ? 4608 * 1024 * 1024 : 0; 380e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 390e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 400e2c34f92f00628d48968dfea096d36381f494cbStephen Hines overflow = 0 ? 0 : 4608 * 1024 * 1024; 410e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 420e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 430e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if (4608 * 1024 * 1024) 440e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 0; 450e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 460e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 470e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if ((uint64_t)(4608 * 1024 * 1024)) 480e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 1; 490e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 500e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 510e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if ((uint64_t)(4608 * 1024 * 1024)) 520e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 2; 530e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 540e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 550e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if ((uint64_t)(4608 * 1024 * 1024 * i)) 560e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 3; 570e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 580e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 590e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if ((1ULL * ((4608) * ((1024) * (1024))) + 2ULL)) 600e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 4; 610e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 620e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 2{{overflow in expression; result is 536870912 with type 'int'}} 630e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if ((uint64_t)((uint64_t)(4608 * 1024 * 1024) * (uint64_t)(4608 * 1024 * 1024))) 640e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 5; 650e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 660e2c34f92f00628d48968dfea096d36381f494cbStephen Hines switch (i) { 670e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 680e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case 4608 * 1024 * 1024: 690e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 6; 700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 537919488 with type 'int'}} 710e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case (uint64_t)(4609 * 1024 * 1024): 720e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 7; 730e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-error@+1 {{expression is not an integer constant expression}} 740e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case ((uint64_t)(4608 * 1024 * 1024 * i)): 750e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 8; 760e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 770e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case ((1ULL * ((4608) * ((1024) * (1024))) + 2ULL)): 780e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 9; 790e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+2 2{{overflow in expression; result is 536870912 with type 'int'}} 800e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow converting case value to switch condition type (288230376151711744 to 0)}} 810e2c34f92f00628d48968dfea096d36381f494cbStephen Hines case ((uint64_t)((uint64_t)(4608 * 1024 * 1024) * (uint64_t)(4608 * 1024 * 1024))): 820e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return 10; 830e2c34f92f00628d48968dfea096d36381f494cbStephen Hines } 840e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 850e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 860e2c34f92f00628d48968dfea096d36381f494cbStephen Hines while (4608 * 1024 * 1024); 870e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 880e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 890e2c34f92f00628d48968dfea096d36381f494cbStephen Hines while ((uint64_t)(4608 * 1024 * 1024)); 900e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 910e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 920e2c34f92f00628d48968dfea096d36381f494cbStephen Hines while ((uint64_t)(4608 * 1024 * 1024)); 930e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 940e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 950e2c34f92f00628d48968dfea096d36381f494cbStephen Hines while ((uint64_t)(4608 * 1024 * 1024 * i)); 960e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 970e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 980e2c34f92f00628d48968dfea096d36381f494cbStephen Hines while ((1ULL * ((4608) * ((1024) * (1024))) + 2ULL)); 990e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1000e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 2{{overflow in expression; result is 536870912 with type 'int'}} 1010e2c34f92f00628d48968dfea096d36381f494cbStephen Hines while ((uint64_t)((uint64_t)(4608 * 1024 * 1024) * (uint64_t)(4608 * 1024 * 1024))); 1020e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1030e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 1040e2c34f92f00628d48968dfea096d36381f494cbStephen Hines do { } while (4608 * 1024 * 1024); 1050e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1060e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 1070e2c34f92f00628d48968dfea096d36381f494cbStephen Hines do { } while ((uint64_t)(4608 * 1024 * 1024)); 1080e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1090e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 1100e2c34f92f00628d48968dfea096d36381f494cbStephen Hines do { } while ((uint64_t)(4608 * 1024 * 1024)); 1110e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1120e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 1130e2c34f92f00628d48968dfea096d36381f494cbStephen Hines do { } while ((uint64_t)(4608 * 1024 * 1024 * i)); 1140e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 1160e2c34f92f00628d48968dfea096d36381f494cbStephen Hines do { } while ((1ULL * ((4608) * ((1024) * (1024))) + 2ULL)); 1170e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1180e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 2{{overflow in expression; result is 536870912 with type 'int'}} 1190e2c34f92f00628d48968dfea096d36381f494cbStephen Hines do { } while ((uint64_t)((uint64_t)(4608 * 1024 * 1024) * (uint64_t)(4608 * 1024 * 1024))); 1200e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1210e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+3 {{overflow in expression; result is 536870912 with type 'int'}} 1220e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+3 {{overflow in expression; result is 536870912 with type 'int'}} 1230e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+3 {{overflow in expression; result is 536870912 with type 'int'}} 1240e2c34f92f00628d48968dfea096d36381f494cbStephen Hines for (uint64_t i = 4608 * 1024 * 1024; 1250e2c34f92f00628d48968dfea096d36381f494cbStephen Hines (uint64_t)(4608 * 1024 * 1024); 1260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines i += (uint64_t)(4608 * 1024 * 1024 * i)); 1270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+3 {{overflow in expression; result is 536870912 with type 'int'}} 1290e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+3 2{{overflow in expression; result is 536870912 with type 'int'}} 1300e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+3 2{{overflow in expression; result is 536870912 with type 'int'}} 1310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines for (uint64_t i = (1ULL * ((4608) * ((1024) * (1024))) + 2ULL); 1320e2c34f92f00628d48968dfea096d36381f494cbStephen Hines ((uint64_t)((uint64_t)(4608 * 1024 * 1024) * (uint64_t)(4608 * 1024 * 1024))); 1330e2c34f92f00628d48968dfea096d36381f494cbStephen Hines i = ((4608 * 1024 * 1024) + ((uint64_t)(4608 * 1024 * 1024)))); 1340e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1350e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 1360e2c34f92f00628d48968dfea096d36381f494cbStephen Hines _Complex long long x = 4608 * 1024 * 1024; 1370e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1380e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 1390e2c34f92f00628d48968dfea096d36381f494cbStephen Hines (__real__ x) = 4608 * 1024 * 1024; 1400e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1410e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 {{overflow in expression; result is 536870912 with type 'int'}} 1420e2c34f92f00628d48968dfea096d36381f494cbStephen Hines (__imag__ x) = 4608 * 1024 * 1024; 1430e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1440e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+4 {{overflow in expression; result is 536870912 with type 'int'}} 1450e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+3 {{array index 536870912 is past the end of the array (which contains 10 elements)}} 1460e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-note@+1 {{array 'a' declared here}} 1470e2c34f92f00628d48968dfea096d36381f494cbStephen Hines uint64_t a[10]; 1480e2c34f92f00628d48968dfea096d36381f494cbStephen Hines a[4608 * 1024 * 1024] = 1i; 1490e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1500e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// expected-warning@+1 2{{overflow in expression; result is 536870912 with type 'int'}} 1510e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return ((4608 * 1024 * 1024) + ((uint64_t)(4608 * 1024 * 1024))); 1520e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 1534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct s { 1554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar unsigned x; 1564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar unsigned y; 1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s = { 1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar .y = 5, 1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar .x = 4 * 1024 * 1024 * 1024 // expected-warning {{overflow in expression; result is 0 with type 'int'}} 1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 1614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct s2 { 1634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar unsigned a0; 1644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct s3 { 1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar unsigned a2; 1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct s4 { 1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar unsigned a4; 1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } a3; 1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } a1; 1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} s2 = { 1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar .a0 = 4 * 1024 * 1024 * 1024, // expected-warning {{overflow in expression; result is 0 with type 'int'}} 1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar { 1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar .a2 = 4 * 1024 * 1024 * 1024, // expected-warning {{overflow in expression; result is 0 with type 'int'}} 1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar { 1774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar .a4 = 4 * 1024 * 1024 * 1024 // expected-warning {{overflow in expression; result is 0 with type 'int'}} 1784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 1794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 1804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 181