| // RUN: %clang_cc1 %s -emit-llvm -o - |
| // REQUIRES: LP64 |
| |
| // Aggregates of size zero should be dropped from argument list. |
| typedef long int Tlong; |
| struct S2411 { |
| __attribute__((aligned)) Tlong:0; |
| }; |
| |
| extern struct S2411 a2411[5]; |
| extern void checkx2411(struct S2411); |
| void test2411(void) { |
| checkx2411(a2411[0]); |
| } |
| |
| // Proper handling of zero sized fields during type conversion. |
| typedef unsigned long long int Tal2ullong __attribute__((aligned(2))); |
| struct S2525 { |
| Tal2ullong: 0; |
| struct { |
| } e; |
| }; |
| struct S2525 s2525; |
| |
| struct { |
| signed char f; |
| char :0; |
| struct{}h; |
| char * i[5]; |
| } data; |
| |
| // Taking address of a zero sized field. |
| struct Z {}; |
| struct Y { |
| int i; |
| struct Z z; |
| }; |
| void *f(struct Y *y) { |
| return &y->z; |
| } |