1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -triple x86_64-apple-darwin9 -verify %s 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoint a[10]; 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoint f0() { 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return __builtin_object_size(&a); // expected-error {{too few arguments to function}} 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoint f1() { 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return (__builtin_object_size(&a, 0) + 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao __builtin_object_size(&a, 1) + 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao __builtin_object_size(&a, 2) + 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao __builtin_object_size(&a, 3)); 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoint f2() { 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return __builtin_object_size(&a, -1); // expected-error {{argument should be a value from 0 to 3}} 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoint f3() { 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return __builtin_object_size(&a, 4); // expected-error {{argument should be a value from 0 to 3}} 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// rdar://6252231 - cannot call vsnprintf with va_list on x86_64 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid f4(const char *fmt, ...) { 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao __builtin_va_list args; 26176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines __builtin___vsnprintf_chk (0, 42, 0, 11, fmt, args); // expected-warning {{'__builtin___vsnprintf_chk' will always overflow destination buffer}} 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// rdar://18334276 30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestypedef __typeof__(sizeof(int)) size_t; 31176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid * memcset(void *restrict dst, int src, size_t n); 32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid * memcpy(void *restrict dst, const void *restrict src, size_t n); 33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#define memset(dest, src, len) __builtin___memset_chk(dest, src, len, __builtin_object_size(dest, 0)) 35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#define memcpy(dest, src, len) __builtin___memcpy_chk(dest, src, len, __builtin_object_size(dest, 0)) 36176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#define memcpy1(dest, src, len) __builtin___memcpy_chk(dest, src, len, __builtin_object_size(dest, 4)) 37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#define NULL ((void *)0) 38176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid f5(void) 40176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines{ 41176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines char buf[10]; 42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines memset((void *)0x100000000ULL, 0, 0x1000); 43176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines memcpy((char *)NULL + 0x10000, buf, 0x10); 44176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines memcpy1((char *)NULL + 0x10000, buf, 0x10); // expected-error {{argument should be a value from 0 to 3}} 45176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 46176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 47176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// rdar://18431336 48176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid f6(void) 49176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines{ 50176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines char b[5]; 51176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines char buf[10]; 52176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines __builtin___memccpy_chk (buf, b, '\0', sizeof(b), __builtin_object_size (buf, 0)); 53176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines __builtin___memccpy_chk (b, buf, '\0', sizeof(buf), __builtin_object_size (b, 0)); // expected-warning {{'__builtin___memccpy_chk' will always overflow destination buffer}} 54176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint pr28314(void) { 574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct { 584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct InvalidField a; // expected-error{{has incomplete type}} expected-note 3{{forward declaration of 'struct InvalidField'}} 594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar char b[0]; 604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } *p; 614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct { 634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct InvalidField a; // expected-error{{has incomplete type}} 644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar char b[1]; 654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } *p2; 664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct { 684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct InvalidField a; // expected-error{{has incomplete type}} 694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar char b[2]; 704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } *p3; 714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar int a = 0; 734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar a += __builtin_object_size(&p->a, 0); 744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar a += __builtin_object_size(p->b, 0); 754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar a += __builtin_object_size(p2->b, 0); 764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar a += __builtin_object_size(p3->b, 0); 774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return a; 784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 79