#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*/ exit(int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char const *const, char *,
                           char *, char *);
int /*<<< orphan*/ stderr;
void usage(void) {
  static const char *const format =
      "%s %s: extract FreeType API names from header files\n\n"
      "this program is used to extract the list of public FreeType API\n"
      "functions. It receives the list of header files as argument and\n"
      "generates a sorted list of unique identifiers\n\n"
      "usage: %s header1 [options] [header2 ...]\n\n"
      "options:   -      : parse the content of stdin, ignore arguments\n"
      "           -v     : verbose mode, output sent to standard error\n"
      "           -oFILE : write output to FILE instead of standard output\n"
      "           -dNAME : indicate DLL file name, 'freetype.dll' by default\n"
      "           -w     : output .DEF file for Visual C++ and Mingw\n"
      "           -wB    : output .DEF file for Borland C++\n"
      "           -wW    : output Watcom Linker Response File\n"
      "\n";
  fprintf(stderr, format, "apinames", "0.1", "apinames");
  exit(1);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2eb5(%rip),%rax
mov    (%rax),%edi
lea    0xecc(%rip),%rsi
lea    0x118b(%rip),%r8
lea    0x118d(%rip),%rcx
mov    %r8,%rdx
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    0x2eb8(%rip),%rax
mov    (%rax),%edi
lea    0xecf(%rip),%rsi
lea    0x1197(%rip),%rcx
lea    0x1187(%rip),%rdx
mov    %rdx,%r8
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@usage.format = internal constant i8* getelementptr inbounds ([710 x i8], [710 x i8]* @.str, i32 0, i32 0)
@.str = [710 x i8] c"%s %s: extract FreeType API names from header files\0A\0Athis program is used to extract the list of public FreeType API\0Afunctions. It receives the list of header files as argument and\0Agenerates a sorted list of unique identifiers\0A\0Ausage: %s header1 [options] [header2 ...]\0A\0Aoptions: - : parse the content of stdin, ignore arguments\0A -v : verbose mode, output sent to standard error\0A -oFILE : write output to FILE instead of standard output\0A -dNAME : indicate DLL file name, 'freetype.dll' by default\0A -w : output .DEF file for Visual C++ and Mingw\0A -wB : output .DEF file for Borland C++\0A -wW : output Watcom Linker Response File\0A\0A\00"
@stderr = global i32 0
@.str.1 = [9 x i8] c"apinames\00"
@.str.2 = [4 x i8] c"0.1\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([710 x i8], [710 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@.str = [710 x i8] c"%s %s: extract FreeType API names from header files\0A\0Athis program is used to extract the list of public FreeType API\0Afunctions. It receives the list of header files as argument and\0Agenerates a sorted list of unique identifiers\0A\0Ausage: %s header1 [options] [header2 ...]\0A\0Aoptions: - : parse the content of stdin, ignore arguments\0A -v : verbose mode, output sent to standard error\0A -oFILE : write output to FILE instead of standard output\0A -dNAME : indicate DLL file name, 'freetype.dll' by default\0A -w : output .DEF file for Visual C++ and Mingw\0A -wB : output .DEF file for Borland C++\0A -wW : output Watcom Linker Response File\0A\0A\00"
@stderr = global i32 0
@.str.1 = [9 x i8] c"apinames\00"
@.str.2 = [4 x i8] c"0.1\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([710 x i8], [710 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @exit(i32 1)
unreachable
}