int main() {
  struct empty2 {
    int i;
  };
  struct empty2 k = {};
  k = (struct empty2){};
  int i;
  typedef struct empty {
  } ES;
  ES k2 = {};
  k2 = (ES){};
  struct point {
    int x, y;
  } * p2, p = {.y = 1, .x = 2};
  p = (struct point){.x = 4, .y = 8};
  p2 = &(struct point){.x = 14, .y = 18};
  p2 = &(struct point){.y = 14, 18};
  struct color {
    int r, g, b;
  };
  struct rectangle {
    struct point tl, br;
    struct color c;
  } r = {
      .br = {.y = 4, .x = 8},
      .c = {.r = 4, .b = 1, .g = 12},
      .tl = {.x = 1, .y = 2},
  };
  r = (struct rectangle){.br = {.y = 4, .x = 8},
                         .c = {.r = 4, .b = 1, .g = 12},
                         .tl = {.x = 1, .y = 2}};
  r = (struct rectangle){
      {.y = 4, .x = 8},
      {.x = 1, .y = 2},
      {.r = 4, .b = 1, .g = 12},
  };
  r = (struct rectangle){.br = (struct point){.y = 4, .x = 8},
                         .c = (struct color){.r = 4, .b = 1, .g = 12},
                         .tl = (struct point){.x = 1, .y = 2}};
  r = (struct rectangle){
      .tl = {.x = 1, .y = 2},
      .br = (struct point){.y = 4, .x = 8},
      {.r = 4, .b = 1, .g = 12},
  };
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
lea    -0x8(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1030 <memset@plt>
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x8(%rbp)
mov    0xec1(%rip),%rax
mov    %rax,-0x30(%rbp)
movl   $0x4,-0x38(%rbp)
movl   $0x8,-0x34(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0x30(%rbp)
movl   $0xe,-0x40(%rbp)
movl   $0x12,-0x3c(%rbp)
lea    -0x40(%rbp),%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0xe,-0x44(%rbp)
lea    -0x48(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    0xe7c(%rip),%rax
mov    %rax,-0x68(%rbp)
mov    0xe79(%rip),%rax
mov    %rax,-0x60(%rbp)
mov    0xe76(%rip),%rax
mov    %rax,-0x58(%rbp)
mov    0xe74(%rip),%eax
mov    %eax,-0x50(%rbp)
movl   $0x1,-0x88(%rbp)
movl   $0x2,-0x84(%rbp)
movl   $0x8,-0x80(%rbp)
movl   $0x4,-0x7c(%rbp)
movl   $0x4,-0x78(%rbp)
movl   $0xc,-0x74(%rbp)
movl   $0x1,-0x70(%rbp)
mov    -0x88(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x80(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x78(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0x50(%rbp)
movl   $0x8,-0xa8(%rbp)
movl   $0x4,-0xa4(%rbp)
movl   $0x1,-0xa0(%rbp)
movl   $0x2,-0x9c(%rbp)
movl   $0x4,-0x98(%rbp)
movl   $0xc,-0x94(%rbp)
movl   $0x1,-0x90(%rbp)
mov    -0xa8(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0xa0(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x98(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x90(%rbp),%eax
mov    %eax,-0x50(%rbp)
movl   $0x1,-0xc8(%rbp)
movl   $0x2,-0xc4(%rbp)
movl   $0x8,-0xc0(%rbp)
movl   $0x4,-0xbc(%rbp)
movl   $0x4,-0xb8(%rbp)
movl   $0xc,-0xb4(%rbp)
movl   $0x1,-0xb0(%rbp)
mov    -0xc8(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0xc0(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0xb8(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0xb0(%rbp),%eax
mov    %eax,-0x50(%rbp)
movl   $0x1,-0xe8(%rbp)
movl   $0x2,-0xe4(%rbp)
movl   $0x8,-0xe0(%rbp)
movl   $0x4,-0xdc(%rbp)
movl   $0x4,-0xd8(%rbp)
movl   $0xc,-0xd4(%rbp)
movl   $0x1,-0xd0(%rbp)
mov    -0xe8(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0xe0(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0xd8(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0xd0(%rbp),%eax
mov    %eax,-0x50(%rbp)
xor    %eax,%eax
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
xor    %eax,%eax
ret

LLVM IR (-O0):
%struct.point = type { i32, i32 }
%struct.rectangle = type { %struct.point, %struct.point, %struct.color }
%struct.color = type { i32, i32, i32 }
%struct.empty2 = type { i32 }
%struct.empty = type {}
@__const.main.p = %struct.point { i32 2, i32 1 }
@__const.main.r = %struct.rectangle { %struct.point { i32 1, i32 2 }, %struct.point { i32 8, i32 4 }, %struct.color { i32 4, i32 12, i32 1 } }
define i32 @main() {
%1 = alloca %struct.empty2
%2 = alloca %struct.empty2
%3 = alloca i32
%4 = alloca %struct.empty
%5 = alloca %struct.empty
%6 = alloca %struct.point*
%7 = alloca %struct.point
%8 = alloca %struct.point
%9 = alloca %struct.point
%10 = alloca %struct.point
%11 = alloca %struct.rectangle
%12 = alloca %struct.rectangle
%13 = alloca %struct.rectangle
%14 = alloca %struct.rectangle
%15 = alloca %struct.rectangle
%16 = bitcast %struct.empty2* %1 to i8*
%17 = getelementptr inbounds %struct.empty2, %struct.empty2* %2, i32 0, i32 0
store i32 0, i32* %17
%18 = bitcast %struct.empty2* %1 to i8*
%19 = bitcast %struct.empty2* %2 to i8*
%20 = bitcast %struct.empty* %4 to i8*
%21 = bitcast %struct.empty* %4 to i8*
%22 = bitcast %struct.empty* %5 to i8*
%23 = bitcast %struct.point* %7 to i8*
%24 = getelementptr inbounds %struct.point, %struct.point* %8, i32 0, i32 0
store i32 4, i32* %24
%25 = getelementptr inbounds %struct.point, %struct.point* %8, i32 0, i32 1
store i32 8, i32* %25
%26 = bitcast %struct.point* %7 to i8*
%27 = bitcast %struct.point* %8 to i8*
%28 = getelementptr inbounds %struct.point, %struct.point* %9, i32 0, i32 0
store i32 14, i32* %28
%29 = getelementptr inbounds %struct.point, %struct.point* %9, i32 0, i32 1
store i32 18, i32* %29
store %struct.point* %9, %struct.point** %6
%30 = getelementptr inbounds %struct.point, %struct.point* %10, i32 0, i32 0
store i32 0, i32* %30
%31 = getelementptr inbounds %struct.point, %struct.point* %10, i32 0, i32 1
store i32 14, i32* %31
store %struct.point* %10, %struct.point** %6
%32 = bitcast %struct.rectangle* %11 to i8*
%33 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %12, i32 0, i32 0
%34 = getelementptr inbounds %struct.point, %struct.point* %33, i32 0, i32 0
store i32 1, i32* %34
%35 = getelementptr inbounds %struct.point, %struct.point* %33, i32 0, i32 1
store i32 2, i32* %35
%36 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %12, i32 0, i32 1
%37 = getelementptr inbounds %struct.point, %struct.point* %36, i32 0, i32 0
store i32 8, i32* %37
%38 = getelementptr inbounds %struct.point, %struct.point* %36, i32 0, i32 1
store i32 4, i32* %38
%39 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %12, i32 0, i32 2
%40 = getelementptr inbounds %struct.color, %struct.color* %39, i32 0, i32 0
store i32 4, i32* %40
%41 = getelementptr inbounds %struct.color, %struct.color* %39, i32 0, i32 1
store i32 12, i32* %41
%42 = getelementptr inbounds %struct.color, %struct.color* %39, i32 0, i32 2
store i32 1, i32* %42
%43 = bitcast %struct.rectangle* %11 to i8*
%44 = bitcast %struct.rectangle* %12 to i8*
%45 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %13, i32 0, i32 0
%46 = getelementptr inbounds %struct.point, %struct.point* %45, i32 0, i32 0
store i32 8, i32* %46
%47 = getelementptr inbounds %struct.point, %struct.point* %45, i32 0, i32 1
store i32 4, i32* %47
%48 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %13, i32 0, i32 1
%49 = getelementptr inbounds %struct.point, %struct.point* %48, i32 0, i32 0
store i32 1, i32* %49
%50 = getelementptr inbounds %struct.point, %struct.point* %48, i32 0, i32 1
store i32 2, i32* %50
%51 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %13, i32 0, i32 2
%52 = getelementptr inbounds %struct.color, %struct.color* %51, i32 0, i32 0
store i32 4, i32* %52
%53 = getelementptr inbounds %struct.color, %struct.color* %51, i32 0, i32 1
store i32 12, i32* %53
%54 = getelementptr inbounds %struct.color, %struct.color* %51, i32 0, i32 2
store i32 1, i32* %54
%55 = bitcast %struct.rectangle* %11 to i8*
%56 = bitcast %struct.rectangle* %13 to i8*
%57 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %14, i32 0, i32 0
%58 = getelementptr inbounds %struct.point, %struct.point* %57, i32 0, i32 0
store i32 1, i32* %58
%59 = getelementptr inbounds %struct.point, %struct.point* %57, i32 0, i32 1
store i32 2, i32* %59
%60 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %14, i32 0, i32 1
%61 = getelementptr inbounds %struct.point, %struct.point* %60, i32 0, i32 0
store i32 8, i32* %61
%62 = getelementptr inbounds %struct.point, %struct.point* %60, i32 0, i32 1
store i32 4, i32* %62
%63 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %14, i32 0, i32 2
%64 = getelementptr inbounds %struct.color, %struct.color* %63, i32 0, i32 0
store i32 4, i32* %64
%65 = getelementptr inbounds %struct.color, %struct.color* %63, i32 0, i32 1
store i32 12, i32* %65
%66 = getelementptr inbounds %struct.color, %struct.color* %63, i32 0, i32 2
store i32 1, i32* %66
%67 = bitcast %struct.rectangle* %11 to i8*
%68 = bitcast %struct.rectangle* %14 to i8*
%69 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %15, i32 0, i32 0
%70 = getelementptr inbounds %struct.point, %struct.point* %69, i32 0, i32 0
store i32 1, i32* %70
%71 = getelementptr inbounds %struct.point, %struct.point* %69, i32 0, i32 1
store i32 2, i32* %71
%72 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %15, i32 0, i32 1
%73 = getelementptr inbounds %struct.point, %struct.point* %72, i32 0, i32 0
store i32 8, i32* %73
%74 = getelementptr inbounds %struct.point, %struct.point* %72, i32 0, i32 1
store i32 4, i32* %74
%75 = getelementptr inbounds %struct.rectangle, %struct.rectangle* %15, i32 0, i32 2
%76 = getelementptr inbounds %struct.color, %struct.color* %75, i32 0, i32 0
store i32 4, i32* %76
%77 = getelementptr inbounds %struct.color, %struct.color* %75, i32 0, i32 1
store i32 12, i32* %77
%78 = getelementptr inbounds %struct.color, %struct.color* %75, i32 0, i32 2
store i32 1, i32* %78
%79 = bitcast %struct.rectangle* %11 to i8*
%80 = bitcast %struct.rectangle* %15 to i8*
ret i32 0
}

LLVM IR (-O2):
%struct.point = type { i32, i32 }
define i32 @main() {
ret i32 0
}