1*67e74705SXin Li // RUN: %clang_cc1 %s -emit-llvm -o - 2*67e74705SXin Li // REQUIRES: LP64 3*67e74705SXin Li 4*67e74705SXin Li // Aggregates of size zero should be dropped from argument list. 5*67e74705SXin Li typedef long int Tlong; 6*67e74705SXin Li struct S2411 { 7*67e74705SXin Li __attribute__((aligned)) Tlong:0; 8*67e74705SXin Li }; 9*67e74705SXin Li 10*67e74705SXin Li extern struct S2411 a2411[5]; 11*67e74705SXin Li extern void checkx2411(struct S2411); test2411(void)12*67e74705SXin Livoid test2411(void) { 13*67e74705SXin Li checkx2411(a2411[0]); 14*67e74705SXin Li } 15*67e74705SXin Li 16*67e74705SXin Li // Proper handling of zero sized fields during type conversion. 17*67e74705SXin Li typedef unsigned long long int Tal2ullong __attribute__((aligned(2))); 18*67e74705SXin Li struct S2525 { 19*67e74705SXin Li Tal2ullong: 0; 20*67e74705SXin Li struct { 21*67e74705SXin Li } e; 22*67e74705SXin Li }; 23*67e74705SXin Li struct S2525 s2525; 24*67e74705SXin Li 25*67e74705SXin Li struct { 26*67e74705SXin Li signed char f; 27*67e74705SXin Li char :0; 28*67e74705SXin Li struct{}h; 29*67e74705SXin Li char * i[5]; 30*67e74705SXin Li } data; 31*67e74705SXin Li 32*67e74705SXin Li // Taking address of a zero sized field. 33*67e74705SXin Li struct Z {}; 34*67e74705SXin Li struct Y { 35*67e74705SXin Li int i; 36*67e74705SXin Li struct Z z; 37*67e74705SXin Li }; f(struct Y * y)38*67e74705SXin Livoid *f(struct Y *y) { 39*67e74705SXin Li return &y->z; 40*67e74705SXin Li } 41