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