1*f7b9f314SRoger Ferrer Ibanez // RUN: %clang_cc1 -fsyntax-only -verify %s
2*f7b9f314SRoger Ferrer Ibanez // expected-no-diagnostics
3*f7b9f314SRoger Ferrer Ibanez
4*f7b9f314SRoger Ferrer Ibanez struct B {
5*f7b9f314SRoger Ferrer Ibanez int x, y, z, w;
6*f7b9f314SRoger Ferrer Ibanez } b;
7*f7b9f314SRoger Ferrer Ibanez
8*f7b9f314SRoger Ferrer Ibanez struct __attribute__((packed)) A {
9*f7b9f314SRoger Ferrer Ibanez struct B b;
10*f7b9f314SRoger Ferrer Ibanez } a;
11*f7b9f314SRoger Ferrer Ibanez
12*f7b9f314SRoger Ferrer Ibanez typedef __typeof__(sizeof(int)) size_t;
13*f7b9f314SRoger Ferrer Ibanez
14*f7b9f314SRoger Ferrer Ibanez extern "C" {
15*f7b9f314SRoger Ferrer Ibanez void *memcpy(void *dest, const void *src, size_t n);
16*f7b9f314SRoger Ferrer Ibanez int memcmp(const void *s1, const void *s2, size_t n);
17*f7b9f314SRoger Ferrer Ibanez void *memmove(void *dest, const void *src, size_t n);
18*f7b9f314SRoger Ferrer Ibanez void *memset(void *s, int c, size_t n);
19*f7b9f314SRoger Ferrer Ibanez }
20*f7b9f314SRoger Ferrer Ibanez
21*f7b9f314SRoger Ferrer Ibanez int x;
22*f7b9f314SRoger Ferrer Ibanez
foo()23*f7b9f314SRoger Ferrer Ibanez void foo() {
24*f7b9f314SRoger Ferrer Ibanez memcpy(&a.b, &b, sizeof(b));
25*f7b9f314SRoger Ferrer Ibanez memmove(&a.b, &b, sizeof(b));
26*f7b9f314SRoger Ferrer Ibanez memset(&a.b, 0, sizeof(b));
27*f7b9f314SRoger Ferrer Ibanez x = memcmp(&a.b, &b, sizeof(b));
28*f7b9f314SRoger Ferrer Ibanez }
29