#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 *, char const *);
int /*<<< orphan*/ show_version();
void show_features(void) {
  const char features[] = ""
                          "\t- select (generic)\n"
                          "\t- poll (Unix)\n"
                          "\t- epoll (Linux 2.6)\n"
                          "\t- /dev/poll (Solaris)\n"
                          "\t- eventports (Solaris)\n"
                          "\t- kqueue (FreeBSD)\n"
                          "\t- libev (generic)\n"
                          "\nNetwork handler:\n\n"
                          "\t- linux-sendfile\n"
                          "\t- freebsd-sendfile\n"
                          "\t- darwin-sendfile\n"
                          "\t- solaris-sendfilev\n"
                          "\t- writev\n"
                          "\t+ write\n"
                          "\t- mmap support\n"
                          "\nFeatures:\n\n"
                          "\t- IPv6 support\n"
                          "\t- zlib support\n"
                          "\t- bzip2 support\n"
                          "\t- crypt support\n"
                          "\t- SSL support\n"
                          "\t- PCRE support\n"
                          "\t- MySQL support\n"
                          "\t- PgSQL support\n"
                          "\t- DBI support\n"
                          "\t- Kerberos support\n"
                          "\t- LDAP support\n"
                          "\t- memcached support\n"
                          "\t- FAM support\n"
                          "\t- LUA support\n"
                          "\t- xml support\n"
                          "\t- SQLite support\n"
                          "\t- GDBM support\n"
                          "\n";
  show_version();
  printf("\nEvent Handlers:\n\n%s", features);
}


x86 assembly (clang, -O0):
<show_features>:
push   %rbp
mov    %rsp,%rbp
sub    $0x240,%rsp
lea    -0x240(%rbp),%rdi
lea    0xeb7(%rip),%rsi
mov    $0x23a,%edx
call   1050 <memcpy@plt>
mov    $0x0,%al
call   1030 <show_version@plt>
lea    -0x240(%rbp),%rsi
lea    0x10d2(%rip),%rdi
call   1040 <printf@plt>
add    $0x240,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<show_features>:
push   %rbx
sub    $0x240,%rsp
lea    0xec1(%rip),%rsi
mov    %rsp,%rbx
mov    $0x23a,%edx
mov    %rbx,%rdi
call   1050 <memcpy@plt>
xor    %eax,%eax
call   1030 <show_version@plt>
lea    0x10dd(%rip),%rdi
mov    %rbx,%rsi
call   1040 <printf@plt>
add    $0x240,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@__const.show_features.features = [570 x i8] c"\09- select (generic)\0A\09- poll (Unix)\0A\09- epoll (Linux 2.6)\0A\09- /dev/poll (Solaris)\0A\09- eventports (Solaris)\0A\09- kqueue (FreeBSD)\0A\09- libev (generic)\0A\0ANetwork handler:\0A\0A\09- linux-sendfile\0A\09- freebsd-sendfile\0A\09- darwin-sendfile\0A\09- solaris-sendfilev\0A\09- writev\0A\09+ write\0A\09- mmap support\0A\0AFeatures:\0A\0A\09- IPv6 support\0A\09- zlib support\0A\09- bzip2 support\0A\09- crypt support\0A\09- SSL support\0A\09- PCRE support\0A\09- MySQL support\0A\09- PgSQL support\0A\09- DBI support\0A\09- Kerberos support\0A\09- LDAP support\0A\09- memcached support\0A\09- FAM support\0A\09- LUA support\0A\09- xml support\0A\09- SQLite support\0A\09- GDBM support\0A\0A\00"
@.str = [21 x i8] c"\0AEvent Handlers:\0A\0A%s\00"
define void @show_features() {
%1 = alloca [570 x i8]
%2 = bitcast [570 x i8]* %1 to i8*
%3 = call i32 (...) @show_version()
%4 = getelementptr inbounds [570 x i8], [570 x i8]* %1, i64 0, i64 0
%5 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8* %4)
ret void
}

LLVM IR (-O2):
@__const.show_features.features = [570 x i8] c"\09- select (generic)\0A\09- poll (Unix)\0A\09- epoll (Linux 2.6)\0A\09- /dev/poll (Solaris)\0A\09- eventports (Solaris)\0A\09- kqueue (FreeBSD)\0A\09- libev (generic)\0A\0ANetwork handler:\0A\0A\09- linux-sendfile\0A\09- freebsd-sendfile\0A\09- darwin-sendfile\0A\09- solaris-sendfilev\0A\09- writev\0A\09+ write\0A\09- mmap support\0A\0AFeatures:\0A\0A\09- IPv6 support\0A\09- zlib support\0A\09- bzip2 support\0A\09- crypt support\0A\09- SSL support\0A\09- PCRE support\0A\09- MySQL support\0A\09- PgSQL support\0A\09- DBI support\0A\09- Kerberos support\0A\09- LDAP support\0A\09- memcached support\0A\09- FAM support\0A\09- LUA support\0A\09- xml support\0A\09- SQLite support\0A\09- GDBM support\0A\0A\00"
@.str = [21 x i8] c"\0AEvent Handlers:\0A\0A%s\00"
define void @show_features() {
%1 = alloca [570 x i8]
%2 = getelementptr inbounds [570 x i8], [570 x i8]* %1, i64 0, i64 0
%3 = tail call i32 (...) @show_version()
%4 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8* %2)
ret void
}