#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_FAILURE;
int /*<<< orphan*/ exit(int /*<<< orphan*/);
int /*<<< orphan*/ puts(char *);
void usage() {
  puts("Usage:\n"
       "\tjwalk [--inspect] [--delimiter <char>] [--file <file_name>] "
       "<expression>\n"
       "Examples:\n"
       "\tjwalk -i < file.json\n"
       "\tjwalk some.path.key < file.json\n"
       "\tjwalk \"**.name\" < file.json\n"
       "\tgzcat big.json.gz | jwalk \"root.*.name\"\n"
       "Options:\n"
       "\t-i, --inspect\n\t Sets inspection mode. This mode dumps the JSON "
       "keys as a nested list,"
       "\n\t expression is not required.\n"
       "\t-d <char>, --delimiter <char>\n\t The <char> delimiter that "
       "separates matched values; e.g.: -d $'\\t'\n"
       "\t-f <file_name>, --file <file_name>\n\t The name of a file containing "
       "JSON text\n"
       "\t<expression>\n\t A path to traverse the JSON tree; e.g.: "
       "house.room.name, \"**.name\", \"a.*.c\"\n"
       "Notes:\n"
       "\t'stdin' is the default input source");
  exit(EXIT_FAILURE);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
call   1030 <puts@plt>
mov    0x2ea9(%rip),%rax
mov    (%rax),%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
lea    0xed8(%rip),%rdi
call   1030 <puts@plt>
mov    0x2eac(%rip),%rax
mov    (%rax),%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@.str = [656 x i8] c"Usage:\0A\09jwalk [--inspect] [--delimiter <char>] [--file <file_name>] <expression>\0AExamples:\0A\09jwalk -i < file.json\0A\09jwalk some.path.key < file.json\0A\09jwalk \22**.name\22 < file.json\0A\09gzcat big.json.gz | jwalk \22root.*.name\22\0AOptions:\0A\09-i, --inspect\0A\09 Sets inspection mode. This mode dumps the JSON keys as a nested list,\0A\09 expression is not required.\0A\09-d <char>, --delimiter <char>\0A\09 The <char> delimiter that separates matched values; e.g.: -d $'\\t'\0A\09-f <file_name>, --file <file_name>\0A\09 The name of a file containing JSON text\0A\09<expression>\0A\09 A path to traverse the JSON tree; e.g.: house.room.name, \22**.name\22, \22a.*.c\22\0ANotes:\0A\09'stdin' is the default input source\00"
@EXIT_FAILURE = global i32 0
define void @usage() {
%1 = call i32 @puts(i8* getelementptr inbounds ([656 x i8], [656 x i8]* @.str, i64 0, i64 0))
%2 = load i32, i32* @EXIT_FAILURE
%3 = call i32 @exit(i32 %2)
unreachable
}

LLVM IR (-O2):
@.str = [656 x i8] c"Usage:\0A\09jwalk [--inspect] [--delimiter <char>] [--file <file_name>] <expression>\0AExamples:\0A\09jwalk -i < file.json\0A\09jwalk some.path.key < file.json\0A\09jwalk \22**.name\22 < file.json\0A\09gzcat big.json.gz | jwalk \22root.*.name\22\0AOptions:\0A\09-i, --inspect\0A\09 Sets inspection mode. This mode dumps the JSON keys as a nested list,\0A\09 expression is not required.\0A\09-d <char>, --delimiter <char>\0A\09 The <char> delimiter that separates matched values; e.g.: -d $'\\t'\0A\09-f <file_name>, --file <file_name>\0A\09 The name of a file containing JSON text\0A\09<expression>\0A\09 A path to traverse the JSON tree; e.g.: house.room.name, \22**.name\22, \22a.*.c\22\0ANotes:\0A\09'stdin' is the default input source\00"
@EXIT_FAILURE = global i32 0
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([656 x i8], [656 x i8]* @.str, i64 0, i64 0))
%2 = load i32, i32* @EXIT_FAILURE
%3 = tail call i32 @exit(i32 %2)
unreachable
}