#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */
typedef struct TYPE_4__ TYPE_2__;
typedef struct TYPE_3__ TYPE_1__;

/* Type definitions */
struct TYPE_4__ {
  int member_0;
  int member_1;
  int member_2;
};
struct TYPE_3__ {
  int member_0;
  int member_1;
  int member_2;
};

/* Variables and functions */
int /*<<< orphan*/ abort();
main() {
  struct {
    int i, j, k;
  } a[][2] = {
      {{1, 2, 3}, {4, 5, 6}},
      {{7, 8, 9}, {10, 11, 12}},
  };
  if (a[0][0].i != 1 || a[0][0].j != 2 || a[0][0].k != 3)
    abort();
  if (a[0][1].i != 4 || a[0][1].j != 5 || a[0][1].k != 6)
    abort();
  if (a[1][0].i != 7 || a[1][0].j != 8 || a[1][0].k != 9)
    abort();
  if (a[1][1].i != 10 || a[1][1].j != 11 || a[1][1].k != 12)
    abort();
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x40(%rbp),%rdi
lea    0xec6(%rip),%rsi
mov    $0x30,%edx
call   1040 <memcpy@plt>
cmpl   $0x1,-0x40(%rbp)
jne    1162 <main+0x42>
cmpl   $0x2,-0x3c(%rbp)
jne    1162 <main+0x42>
cmpl   $0x3,-0x38(%rbp)
je     1169 <main+0x49>
mov    $0x0,%al
call   1030 <abort@plt>
cmpl   $0x4,-0x34(%rbp)
jne    1187 <main+0x67>
cmpl   $0x5,-0x30(%rbp)
jne    1187 <main+0x67>
cmpl   $0x6,-0x2c(%rbp)
je     118e <main+0x6e>
mov    $0x0,%al
call   1030 <abort@plt>
cmpl   $0x7,-0x28(%rbp)
jne    11ac <main+0x8c>
cmpl   $0x8,-0x24(%rbp)
jne    11ac <main+0x8c>
cmpl   $0x9,-0x20(%rbp)
je     11b3 <main+0x93>
mov    $0x0,%al
call   1030 <abort@plt>
cmpl   $0xa,-0x1c(%rbp)
jne    11d1 <main+0xb1>
cmpl   $0xb,-0x18(%rbp)
jne    11d1 <main+0xb1>
cmpl   $0xc,-0x14(%rbp)
je     11d8 <main+0xb8>
mov    $0x0,%al
call   1030 <abort@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret

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

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

LLVM IR (-O2):
define i32 @main() {
ret i32 0
}