void test_complex_designator() {
  struct {
    struct {
      int a, b;
    } x[3];
  } y[] = {[1].x[0].b = 5, 6, 7, 8, 9, [0].x[2].b = 10, 11};
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      114, 0, y[0].x[0].a);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      115, 0, y[0].x[0].b);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      116, 0, y[0].x[1].a);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      117, 0, y[0].x[1].b);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      118, 0, y[0].x[2].a);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      119, 10, y[0].x[2].b);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      120, 11, y[1].x[0].a);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      121, 5, y[1].x[0].b);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      122, 6, y[1].x[1].a);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      123, 7, y[1].x[1].b);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      124, 8, y[1].x[2].a);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      125, 9, y[1].x[2].b);
  ;
  int y2[][3] = {[0][0] = 1, [1][0] = 3};
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      128, 1, y2[0][0]);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      129, 3, y2[1][0]);
  ;
  struct {
    int a, b[3];
  } y3 = {.a = 1, .b[0] = 10, .b[1] = 11};
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      132, 1, y3.a);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      133, 10, y3.b[0]);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      134, 11, y3.b[1]);
  ;
  fexpect(
      "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
      "2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c",
      135, 0, y3.b[2]);
  ;
}


x86 assembly (clang, -O0):
<test_complex_designator>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
lea    -0x30(%rbp),%rdi
lea    0xecd(%rip),%rsi
mov    $0x30,%edx
call   1030 <memcpy@plt>
mov    -0x30(%rbp),%ecx
lea    0xf01(%rip),%rdi
mov    $0x72,%esi
xor    %edx,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x2c(%rbp),%ecx
lea    0xee9(%rip),%rdi
mov    $0x73,%esi
xor    %edx,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x28(%rbp),%ecx
lea    0xed1(%rip),%rdi
mov    $0x74,%esi
xor    %edx,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x24(%rbp),%ecx
lea    0xeb9(%rip),%rdi
mov    $0x75,%esi
xor    %edx,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x20(%rbp),%ecx
lea    0xea1(%rip),%rdi
mov    $0x76,%esi
xor    %edx,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x1c(%rbp),%ecx
lea    0xe89(%rip),%rdi
mov    $0x77,%esi
mov    $0xa,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x18(%rbp),%ecx
lea    0xe6e(%rip),%rdi
mov    $0x78,%esi
mov    $0xb,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x14(%rbp),%ecx
lea    0xe53(%rip),%rdi
mov    $0x79,%esi
mov    $0x5,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x10(%rbp),%ecx
lea    0xe38(%rip),%rdi
mov    $0x7a,%esi
mov    $0x6,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0xc(%rbp),%ecx
lea    0xe1d(%rip),%rdi
mov    $0x7b,%esi
mov    $0x7,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x8(%rbp),%ecx
lea    0xe02(%rip),%rdi
mov    $0x7c,%esi
mov    $0x8,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x4(%rbp),%ecx
lea    0xde7(%rip),%rdi
mov    $0x7d,%esi
mov    $0x9,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    0xdb7(%rip),%rax
mov    %rax,-0x50(%rbp)
mov    0xdb4(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    0xdb1(%rip),%rax
mov    %rax,-0x40(%rbp)
mov    -0x50(%rbp),%ecx
lea    0xdab(%rip),%rdi
mov    $0x80,%esi
mov    $0x1,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x44(%rbp),%ecx
lea    0xd90(%rip),%rdi
mov    $0x81,%esi
mov    $0x3,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    0xe00(%rip),%rax
mov    %rax,-0x60(%rbp)
mov    0xdfd(%rip),%rax
mov    %rax,-0x58(%rbp)
mov    -0x60(%rbp),%ecx
lea    0xd5f(%rip),%rdi
mov    $0x84,%esi
mov    $0x1,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x5c(%rbp),%ecx
lea    0xd44(%rip),%rdi
mov    $0x85,%esi
mov    $0xa,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x58(%rbp),%ecx
lea    0xd29(%rip),%rdi
mov    $0x86,%esi
mov    $0xb,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
mov    -0x54(%rbp),%ecx
lea    0xd0e(%rip),%rdi
mov    $0x87,%esi
xor    %edx,%edx
mov    $0x0,%al
call   1040 <fexpect@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_complex_designator>:
push   %rbx
lea    0xee8(%rip),%rbx
mov    %rbx,%rdi
mov    $0x72,%esi
xor    %edx,%edx
xor    %ecx,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x73,%esi
xor    %edx,%edx
xor    %ecx,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x74,%esi
xor    %edx,%edx
xor    %ecx,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x75,%esi
xor    %edx,%edx
xor    %ecx,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x76,%esi
xor    %edx,%edx
xor    %ecx,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x77,%esi
mov    $0xa,%edx
mov    $0xa,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x78,%esi
mov    $0xb,%edx
mov    $0xb,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x79,%esi
mov    $0x5,%edx
mov    $0x5,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x7a,%esi
mov    $0x6,%edx
mov    $0x6,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x7b,%esi
mov    $0x7,%edx
mov    $0x7,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x7c,%esi
mov    $0x8,%edx
mov    $0x8,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x7d,%esi
mov    $0x9,%edx
mov    $0x9,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x80,%esi
mov    $0x1,%edx
mov    $0x1,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x81,%esi
mov    $0x3,%edx
mov    $0x3,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x84,%esi
mov    $0x1,%edx
mov    $0x1,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x85,%esi
mov    $0xa,%edx
mov    $0xa,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x86,%esi
mov    $0xb,%edx
mov    $0xb,%ecx
xor    %eax,%eax
call   1030 <fexpect@plt>
mov    %rbx,%rdi
mov    $0x87,%esi
xor    %edx,%edx
xor    %ecx,%ecx
xor    %eax,%eax
pop    %rbx
jmp    1030 <fexpect@plt>

LLVM IR (-O0):
%struct.anon = type { [3 x %struct.anon.0] }
%struct.anon.0 = type { i32, i32 }
%struct.anon.1 = type { i32, [3 x i32] }
@__const.test_complex_designator.y = [2 x %struct.anon] [%struct.anon { [3 x %struct.anon.0] [%struct.anon.0 zeroinitializer, %struct.anon.0 zeroinitializer, %struct.anon.0 { i32 0, i32 10 }] }, %struct.anon { [3 x %struct.anon.0] [%struct.anon.0 { i32 11, i32 5 }, %struct.anon.0 { i32 6, i32 7 }, %struct.anon.0 { i32 8, i32 9 }] }]
@.str = [134 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c\00"
@__const.test_complex_designator.y2 = [2 x [3 x i32]] [[3 x i32] [i32 1, i32 0, i32 0], [3 x i32] [i32 3, i32 0, i32 0]]
@__const.test_complex_designator.y3 = %struct.anon.1 { i32 1, [3 x i32] [i32 10, i32 11, i32 0] }
define void @test_complex_designator() {
%1 = alloca [2 x %struct.anon]
%2 = alloca [2 x [3 x i32]]
%3 = alloca %struct.anon.1
%4 = bitcast [2 x %struct.anon]* %1 to i8*
%5 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 0
%6 = getelementptr inbounds %struct.anon, %struct.anon* %5, i32 0, i32 0
%7 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %6, i64 0, i64 0
%8 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %7, i32 0, i32 0
%9 = load i32, i32* %8
%10 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 114, i32 0, i32 %9)
%11 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 0
%12 = getelementptr inbounds %struct.anon, %struct.anon* %11, i32 0, i32 0
%13 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %12, i64 0, i64 0
%14 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %13, i32 0, i32 1
%15 = load i32, i32* %14
%16 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 115, i32 0, i32 %15)
%17 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 0
%18 = getelementptr inbounds %struct.anon, %struct.anon* %17, i32 0, i32 0
%19 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %18, i64 0, i64 1
%20 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %19, i32 0, i32 0
%21 = load i32, i32* %20
%22 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 116, i32 0, i32 %21)
%23 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 0
%24 = getelementptr inbounds %struct.anon, %struct.anon* %23, i32 0, i32 0
%25 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %24, i64 0, i64 1
%26 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %25, i32 0, i32 1
%27 = load i32, i32* %26
%28 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 117, i32 0, i32 %27)
%29 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 0
%30 = getelementptr inbounds %struct.anon, %struct.anon* %29, i32 0, i32 0
%31 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %30, i64 0, i64 2
%32 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %31, i32 0, i32 0
%33 = load i32, i32* %32
%34 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 118, i32 0, i32 %33)
%35 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 0
%36 = getelementptr inbounds %struct.anon, %struct.anon* %35, i32 0, i32 0
%37 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %36, i64 0, i64 2
%38 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %37, i32 0, i32 1
%39 = load i32, i32* %38
%40 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 119, i32 10, i32 %39)
%41 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 1
%42 = getelementptr inbounds %struct.anon, %struct.anon* %41, i32 0, i32 0
%43 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %42, i64 0, i64 0
%44 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %43, i32 0, i32 0
%45 = load i32, i32* %44
%46 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 120, i32 11, i32 %45)
%47 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 1
%48 = getelementptr inbounds %struct.anon, %struct.anon* %47, i32 0, i32 0
%49 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %48, i64 0, i64 0
%50 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %49, i32 0, i32 1
%51 = load i32, i32* %50
%52 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 121, i32 5, i32 %51)
%53 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 1
%54 = getelementptr inbounds %struct.anon, %struct.anon* %53, i32 0, i32 0
%55 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %54, i64 0, i64 1
%56 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %55, i32 0, i32 0
%57 = load i32, i32* %56
%58 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 122, i32 6, i32 %57)
%59 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 1
%60 = getelementptr inbounds %struct.anon, %struct.anon* %59, i32 0, i32 0
%61 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %60, i64 0, i64 1
%62 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %61, i32 0, i32 1
%63 = load i32, i32* %62
%64 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 123, i32 7, i32 %63)
%65 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 1
%66 = getelementptr inbounds %struct.anon, %struct.anon* %65, i32 0, i32 0
%67 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %66, i64 0, i64 2
%68 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %67, i32 0, i32 0
%69 = load i32, i32* %68
%70 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 124, i32 8, i32 %69)
%71 = getelementptr inbounds [2 x %struct.anon], [2 x %struct.anon]* %1, i64 0, i64 1
%72 = getelementptr inbounds %struct.anon, %struct.anon* %71, i32 0, i32 0
%73 = getelementptr inbounds [3 x %struct.anon.0], [3 x %struct.anon.0]* %72, i64 0, i64 2
%74 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %73, i32 0, i32 1
%75 = load i32, i32* %74
%76 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 125, i32 9, i32 %75)
%77 = bitcast [2 x [3 x i32]]* %2 to i8*
%78 = getelementptr inbounds [2 x [3 x i32]], [2 x [3 x i32]]* %2, i64 0, i64 0
%79 = getelementptr inbounds [3 x i32], [3 x i32]* %78, i64 0, i64 0
%80 = load i32, i32* %79
%81 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 128, i32 1, i32 %80)
%82 = getelementptr inbounds [2 x [3 x i32]], [2 x [3 x i32]]* %2, i64 0, i64 1
%83 = getelementptr inbounds [3 x i32], [3 x i32]* %82, i64 0, i64 0
%84 = load i32, i32* %83
%85 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 129, i32 3, i32 %84)
%86 = bitcast %struct.anon.1* %3 to i8*
%87 = getelementptr inbounds %struct.anon.1, %struct.anon.1* %3, i32 0, i32 0
%88 = load i32, i32* %87
%89 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 132, i32 1, i32 %88)
%90 = getelementptr inbounds %struct.anon.1, %struct.anon.1* %3, i32 0, i32 1
%91 = getelementptr inbounds [3 x i32], [3 x i32]* %90, i64 0, i64 0
%92 = load i32, i32* %91
%93 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 133, i32 10, i32 %92)
%94 = getelementptr inbounds %struct.anon.1, %struct.anon.1* %3, i32 0, i32 1
%95 = getelementptr inbounds [3 x i32], [3 x i32]* %94, i64 0, i64 1
%96 = load i32, i32* %95
%97 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 134, i32 11, i32 %96)
%98 = getelementptr inbounds %struct.anon.1, %struct.anon.1* %3, i32 0, i32 1
%99 = getelementptr inbounds [3 x i32], [3 x i32]* %98, i64 0, i64 2
%100 = load i32, i32* %99
%101 = call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 135, i32 0, i32 %100)
ret void
}

LLVM IR (-O2):
@.str = [134 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/8l/8cc/refs/heads/master/test/initializer.c\00"
define void @test_complex_designator() {
%1 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 114, i32 0, i32 0)
%2 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 115, i32 0, i32 0)
%3 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 116, i32 0, i32 0)
%4 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 117, i32 0, i32 0)
%5 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 118, i32 0, i32 0)
%6 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 119, i32 10, i32 10)
%7 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 120, i32 11, i32 11)
%8 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 121, i32 5, i32 5)
%9 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 122, i32 6, i32 6)
%10 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 123, i32 7, i32 7)
%11 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 124, i32 8, i32 8)
%12 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 125, i32 9, i32 9)
%13 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 128, i32 1, i32 1)
%14 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 129, i32 3, i32 3)
%15 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 132, i32 1, i32 1)
%16 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 133, i32 10, i32 10)
%17 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 134, i32 11, i32 11)
%18 = tail call i32 (i8*, i32, i32, i32, ...) bitcast (i32 (...)* @fexpect to i32 (i8*, i32, i32, i32, ...)*)(i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str, i64 0, i64 0), i32 135, i32 0, i32 0)
ret void
}