#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 */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, int, int, int, int, int, int, int, int, int,
                          int, int, int, int, int, int, int, int, int, char *,
                          int, int, int, int, int, int, int, int, int, int);
int main(void) {
  char *fmt;
  fmt =
      "/* quine.c: a program to print its own source%c * Copyright (c) 2018 "
      "Eric Herman <eric@freesa.org>%c * License GPLv3 or later%c * "
      "https://www.gnu.org/licenses/gpl-3.0.txt */%c%c#include "
      "<stdio.h>%c%c#define LF 10%c#define TAB 9%c#define DQUOTE 34%c%cint "
      "main(void)%c{%c%cchar *fmt;%c%c%cfmt = %c%s%c;%c%c%cprintf(fmt, LF, LF, "
      "LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, TAB, LF, LF, TAB, DQUOTE, "
      "fmt, DQUOTE, LF, LF, TAB, LF, LF, TAB, LF, LF, LF);%c%c%creturn 0;%c}%c";
  printf(fmt, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10, 10, 9,
         34, fmt, 34, 10, 10, 9, 10, 10, 9, 10, 10, 10);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xed7(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x10(%rbp),%rax
mov    $0xa,%r9d
mov    %r9d,%esi
mov    %r9d,%edx
mov    %r9d,%ecx
mov    %r9d,%r8d
movl   $0xa,(%rsp)
movl   $0xa,0x8(%rsp)
movl   $0xa,0x10(%rsp)
movl   $0xa,0x18(%rsp)
movl   $0xa,0x20(%rsp)
movl   $0xa,0x28(%rsp)
movl   $0xa,0x30(%rsp)
movl   $0xa,0x38(%rsp)
movl   $0x9,0x40(%rsp)
movl   $0xa,0x48(%rsp)
movl   $0xa,0x50(%rsp)
movl   $0x9,0x58(%rsp)
movl   $0x22,0x60(%rsp)
mov    %rax,0x68(%rsp)
movl   $0x22,0x70(%rsp)
movl   $0xa,0x78(%rsp)
movl   $0xa,0x80(%rsp)
movl   $0x9,0x88(%rsp)
movl   $0xa,0x90(%rsp)
movl   $0xa,0x98(%rsp)
movl   $0x9,0xa0(%rsp)
movl   $0xa,0xa8(%rsp)
movl   $0xa,0xb0(%rsp)
movl   $0xa,0xb8(%rsp)
call   1030 <printf@plt>
xor    %eax,%eax
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
lea    0xee8(%rip),%rdi
mov    $0xa,%esi
mov    $0xa,%edx
mov    $0xa,%ecx
mov    $0xa,%r8d
mov    $0xa,%r9d
push   $0xa
push   $0xa
push   $0xa
push   $0x9
push   $0xa
push   $0xa
push   $0x9
push   $0xa
push   $0xa
push   $0x22
push   %rdi
push   $0x22
push   $0x9
push   $0xa
push   $0xa
push   $0x9
push   $0xa
push   $0xa
push   $0xa
push   $0xa
push   $0xa
push   $0xa
push   $0xa
push   $0xa
call   1030 <printf@plt>
add    $0xc0,%rsp
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [468 x i8] c"/* quine.c: a program to print its own source%c * Copyright (c) 2018 Eric Herman <eric@freesa.org>%c * License GPLv3 or later%c * https://www.gnu.org/licenses/gpl-3.0.txt */%c%c#include <stdio.h>%c%c#define LF 10%c#define TAB 9%c#define DQUOTE 34%c%cint main(void)%c{%c%cchar *fmt;%c%c%cfmt = %c%s%c;%c%c%cprintf(fmt, LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, TAB, LF, LF, TAB, DQUOTE, fmt, DQUOTE, LF, LF, TAB, LF, LF, TAB, LF, LF, LF);%c%c%creturn 0;%c}%c\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8*
store i32 0, i32* %1
store i8* getelementptr inbounds ([468 x i8], [468 x i8]* @.str, i64 0, i64 0), i8** %2
%3 = load i8*, i8** %2
%4 = load i8*, i8** %2
%5 = call i32 @printf(i8* %3, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 9, i32 10, i32 10, i32 9, i32 34, i8* %4, i32 34, i32 10, i32 10, i32 9, i32 10, i32 10, i32 9, i32 10, i32 10, i32 10)
ret i32 0
}

LLVM IR (-O2):
@.str = [468 x i8] c"/* quine.c: a program to print its own source%c * Copyright (c) 2018 Eric Herman <eric@freesa.org>%c * License GPLv3 or later%c * https://www.gnu.org/licenses/gpl-3.0.txt */%c%c#include <stdio.h>%c%c#define LF 10%c#define TAB 9%c#define DQUOTE 34%c%cint main(void)%c{%c%cchar *fmt;%c%c%cfmt = %c%s%c;%c%c%cprintf(fmt, LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, LF, TAB, LF, LF, TAB, DQUOTE, fmt, DQUOTE, LF, LF, TAB, LF, LF, TAB, LF, LF, LF);%c%c%creturn 0;%c}%c\00"
define i32 @main() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([468 x i8], [468 x i8]* @.str, i64 0, i64 0), i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 9, i32 10, i32 10, i32 9, i32 34, i8* getelementptr inbounds ([468 x i8], [468 x i8]* @.str, i64 0, i64 0), i32 34, i32 10, i32 10, i32 9, i32 10, i32 10, i32 9, i32 10, i32 10, i32 10)
ret i32 0
}