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