exprs.c revision f0a990c2aa0b596a7e3cdd8fa2a5909d591ffe66
1d7d5f0223bd30dfd618762349c6209dd1d5ea3e6Daniel Dunbar// RUN: clang-cc %s -emit-llvm -o - 2efdd1574e3cca00ef0410aee8b7ee36eda5a2f71Chris Lattner 3efdd1574e3cca00ef0410aee8b7ee36eda5a2f71Chris Lattner// PR1895 4efdd1574e3cca00ef0410aee8b7ee36eda5a2f71Chris Lattner// sizeof function 5efdd1574e3cca00ef0410aee8b7ee36eda5a2f71Chris Lattnerint zxcv(void); 6efdd1574e3cca00ef0410aee8b7ee36eda5a2f71Chris Lattnerint x=sizeof(zxcv); 7efdd1574e3cca00ef0410aee8b7ee36eda5a2f71Chris Lattnerint y=__alignof__(zxcv); 8efdd1574e3cca00ef0410aee8b7ee36eda5a2f71Chris Lattner 98f925280abe3795ae0fb47f2ba90faea62e26af4Chris Lattner 108f925280abe3795ae0fb47f2ba90faea62e26af4Chris Lattnervoid *test(int *i) { 118f925280abe3795ae0fb47f2ba90faea62e26af4Chris Lattner short a = 1; 128f925280abe3795ae0fb47f2ba90faea62e26af4Chris Lattner i += a; 138f925280abe3795ae0fb47f2ba90faea62e26af4Chris Lattner i + a; 148f925280abe3795ae0fb47f2ba90faea62e26af4Chris Lattner a + i; 158f925280abe3795ae0fb47f2ba90faea62e26af4Chris Lattner} 168f925280abe3795ae0fb47f2ba90faea62e26af4Chris Lattner 1701e3c9e06db9ba5729272879c2c9c4659354e707Chris Lattner_Bool test2b; 1801e3c9e06db9ba5729272879c2c9c4659354e707Chris Lattnerint test2() {if (test2b);} 1901e3c9e06db9ba5729272879c2c9c4659354e707Chris Lattner 206860f3cef7d5ed22cf7626e357c202124c43c899Chris Lattner// PR1921 216860f3cef7d5ed22cf7626e357c202124c43c899Chris Lattnerint test3() { 226860f3cef7d5ed22cf7626e357c202124c43c899Chris Lattner const unsigned char *bp; 236860f3cef7d5ed22cf7626e357c202124c43c899Chris Lattner bp -= (short)1; 246860f3cef7d5ed22cf7626e357c202124c43c899Chris Lattner} 256860f3cef7d5ed22cf7626e357c202124c43c899Chris Lattner 26a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattner// PR2080 - sizeof void 27a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattnerint t1 = sizeof(void); 28a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattnerint t2 = __alignof__(void); 29a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattnervoid test4() { 30a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattner t1 = sizeof(void); 31a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattner t2 = __alignof__(void); 32a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattner 33a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattner t1 = sizeof(test4()); 34a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattner t2 = __alignof__(test4()); 35a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattner} 36a269ebfd91c4fa47e051fa1fa904833a022fe025Chris Lattner 373cc5e5b5268d7359c818ca5a2b62a339923020c4Chris Lattner// 'const float' promotes to double in varargs. 383cc5e5b5268d7359c818ca5a2b62a339923020c4Chris Lattnerint test5(const float x, float float_number) { 393cc5e5b5268d7359c818ca5a2b62a339923020c4Chris Lattner return __builtin_isless(x, float_number); 403cc5e5b5268d7359c818ca5a2b62a339923020c4Chris Lattner} 413cc5e5b5268d7359c818ca5a2b62a339923020c4Chris Lattner 42f9ef0c675b12ab53fdd6c4e3e7226d066d293e99Nuno Lopes// this one shouldn't fold 43f9ef0c675b12ab53fdd6c4e3e7226d066d293e99Nuno Lopesint ola() { 44f9ef0c675b12ab53fdd6c4e3e7226d066d293e99Nuno Lopes int a=2; 45f9ef0c675b12ab53fdd6c4e3e7226d066d293e99Nuno Lopes if ((0, (int)a) & 2) { return 1; } 46f9ef0c675b12ab53fdd6c4e3e7226d066d293e99Nuno Lopes return 2; 47f9ef0c675b12ab53fdd6c4e3e7226d066d293e99Nuno Lopes} 48a468d34bed16861f25aff6c8354f4e75d3358c1aNuno Lopes 49a468d34bed16861f25aff6c8354f4e75d3358c1aNuno Lopes// this one shouldn't fold as well 50a468d34bed16861f25aff6c8354f4e75d3358c1aNuno Lopesvoid eMaisUma() { 51a468d34bed16861f25aff6c8354f4e75d3358c1aNuno Lopes double t[1]; 52a468d34bed16861f25aff6c8354f4e75d3358c1aNuno Lopes if (*t) 53a468d34bed16861f25aff6c8354f4e75d3358c1aNuno Lopes return; 54a468d34bed16861f25aff6c8354f4e75d3358c1aNuno Lopes} 55e5ed15195b71b8fa440e67d49db0168bb58e4e8aChris Lattner 56e5ed15195b71b8fa440e67d49db0168bb58e4e8aChris Lattner// rdar://6520707 57e5ed15195b71b8fa440e67d49db0168bb58e4e8aChris Lattnervoid f0(void (*fp)(void), void (*fp2)(void)) { 58e5ed15195b71b8fa440e67d49db0168bb58e4e8aChris Lattner int x = fp - fp2; 59e5ed15195b71b8fa440e67d49db0168bb58e4e8aChris Lattner} 60e5ed15195b71b8fa440e67d49db0168bb58e4e8aChris Lattner 61c3953a61f7e2a9919ce18d418f8b26a8612e87f2Chris Lattner// noop casts as lvalues. 62c3953a61f7e2a9919ce18d418f8b26a8612e87f2Chris Lattnerstruct X { 63c3953a61f7e2a9919ce18d418f8b26a8612e87f2Chris Lattner int Y; 64c3953a61f7e2a9919ce18d418f8b26a8612e87f2Chris Lattner}; 65c3953a61f7e2a9919ce18d418f8b26a8612e87f2Chris Lattnerstruct X foo(); 66c3953a61f7e2a9919ce18d418f8b26a8612e87f2Chris Lattnerint bar() { 67c3953a61f7e2a9919ce18d418f8b26a8612e87f2Chris Lattner return ((struct X)foo()).Y + 1; 68c3953a61f7e2a9919ce18d418f8b26a8612e87f2Chris Lattner} 69e5ed15195b71b8fa440e67d49db0168bb58e4e8aChris Lattner 708cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner// PR3809: INC/DEC of function pointers. 718cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattnervoid f2(void); 728cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattnerunsigned f1(void) { 738cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner void (*fp)(void) = f2; 748cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner 758cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner ++fp; 768cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner fp++; 778cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner --fp; 788cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner fp--; 798cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner return (unsigned) fp; 808cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner} 818cc9d08eb8b2652ca939d724ab64dec906e418a0Chris Lattner 8275dfedaf702822c9e51a4f3c5d3ecf2d2ad99272Chris Lattnerunion f3_x {int x; float y;}; 8375dfedaf702822c9e51a4f3c5d3ecf2d2ad99272Chris Lattnerint f3() {return ((union f3_x)2).x;} 8475dfedaf702822c9e51a4f3c5d3ecf2d2ad99272Chris Lattner 8540f929242a58103f7883e7dbe2415787895b5cbeChris Lattnerunion f4_y {int x; _Complex float y;}; 8640f929242a58103f7883e7dbe2415787895b5cbeChris Lattner_Complex float f4() {return ((union f4_y)(_Complex float)2.0).y;} 8740f929242a58103f7883e7dbe2415787895b5cbeChris Lattner 8840f929242a58103f7883e7dbe2415787895b5cbeChris Lattnerstruct f5_a { int a; } f5_a; 8940f929242a58103f7883e7dbe2415787895b5cbeChris Lattnerunion f5_z {int x; struct f5_a y;}; 9040f929242a58103f7883e7dbe2415787895b5cbeChris Lattnerstruct f5_a f5() {return ((union f5_z)f5_a).y;} 919034558f2f9ac1dc6bd2e74f4481ca62fce28718Daniel Dunbar 929034558f2f9ac1dc6bd2e74f4481ca62fce28718Daniel Dunbar// ?: in "lvalue" 939034558f2f9ac1dc6bd2e74f4481ca62fce28718Daniel Dunbarstruct s6 { int f0; }; 949034558f2f9ac1dc6bd2e74f4481ca62fce28718Daniel Dunbarint f6(int a0, struct s6 a1, struct s6 a2) { 959034558f2f9ac1dc6bd2e74f4481ca62fce28718Daniel Dunbar return (a0 ? a1 : a2).f0; 969034558f2f9ac1dc6bd2e74f4481ca62fce28718Daniel Dunbar} 97f0a990c2aa0b596a7e3cdd8fa2a5909d591ffe66Chris Lattner 98f0a990c2aa0b596a7e3cdd8fa2a5909d591ffe66Chris Lattner// PR4026 99f0a990c2aa0b596a7e3cdd8fa2a5909d591ffe66Chris Lattnervoid f7() { 100f0a990c2aa0b596a7e3cdd8fa2a5909d591ffe66Chris Lattner __func__; 101f0a990c2aa0b596a7e3cdd8fa2a5909d591ffe66Chris Lattner} 102