xref: /llvm-project/clang/test/SemaCXX/address-packed-member-memops.cpp (revision f7b9f3149b764b8beb8e776f888f718f22447bdd)
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