#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 *, char *);
int /*<<< orphan*/ stderr;
helpuser() {
  register char **ptr;
  static char *helpinfo[] = {
      "-v\tverbose messages while executing",
      "-s\tdo checking with 'sum' after unpack",
      "-x\tdon't overwrite existing files",
      "-b\ttreat all files as binary, use uuencode",
      "-t\ttreat all files as text (default)",
      "-p\tallow positional parameter options. The options \"-b\"",
      "\tand \"-t\" may be embedded, and files to the right of the",
      "\toption will be processed in the specified mode",
      "-m\tmkdirs are disabled for restoral",
      "-M\tmixed mode. Determine if the files are text or",
      "\tbinary and archive correctly.",
      "-D\toutput date, user, and directory comments to the archive",
      "-c\tstart the shar with 'cut here'",
      "-f\trestore by filename only, rather than path",
      "-dXXX\tuse XXX to delimit the files in the shar",
      "-oXXX\t(or -o XXX) output to file XXX01 thru XXXnn",
      "-lXX\tlimit output file size to XXk bytes",
      "\nThe 'o' option is required if the 'l' option is used",
      NULL};
  fprintf(stderr, "\nFormat:\n  %s [ options ] file [ file1 ... ] ]\n",
          "shar2");
  for (ptr = helpinfo; *ptr; ptr++)
    fprintf(stderr, "%s\n", *ptr);
  exit(1);
}


x86 assembly (clang, -O0):
<helpuser>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    0x2eb1(%rip),%rax
mov    (%rax),%edi
lea    0x11e7(%rip),%rsi
lea    0x1210(%rip),%rdx
call   1030 <fprintf@plt>
lea    0x2ef5(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
cmpq   $0x0,(%rax)
je     118a <helpuser+0x6a>
mov    0x2e7c(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rax
mov    (%rax),%rdx
lea    0x11e1(%rip),%rsi
call   1030 <fprintf@plt>
mov    -0x8(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x8(%rbp)
jmp    114f <helpuser+0x2f>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<helpuser>:
push   %r14
push   %rbx
push   %rax
mov    0x2eb5(%rip),%r14
mov    (%r14),%edi
lea    0x11ea(%rip),%rsi
lea    0x1213(%rip),%rdx
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0x120a(%rip),%rbx
lea    0xeae(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xec0(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xed5(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xee5(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xefe(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xf11(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xf37(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xf5e(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xf7c(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xf8e(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xfae(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xfbb(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xfe5(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xff5(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0x1011(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0x102e(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0x104e(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0x1065(%rip),%rdx
mov    %rbx,%rsi
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@helpuser.helpinfo = internal global [19 x i8*] [i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.17, i32 0, i32 0), i8* null]
@.str = [36 x i8] c"-v\09verbose messages while executing\00"
@.str.1 = [39 x i8] c"-s\09do checking with 'sum' after unpack\00"
@.str.2 = [34 x i8] c"-x\09don't overwrite existing files\00"
@.str.3 = [43 x i8] c"-b\09treat all files as binary, use uuencode\00"
@.str.4 = [37 x i8] c"-t\09treat all files as text (default)\00"
@.str.5 = [56 x i8] c"-p\09allow positional parameter options. The options \22-b\22\00"
@.str.6 = [57 x i8] c"\09and \22-t\22 may be embedded, and files to the right of the\00"
@.str.7 = [48 x i8] c"\09option will be processed in the specified mode\00"
@.str.8 = [36 x i8] c"-m\09mkdirs are disabled for restoral\00"
@.str.9 = [50 x i8] c"-M\09mixed mode. Determine if the files are text or\00"
@.str.10 = [31 x i8] c"\09binary and archive correctly.\00"
@.str.11 = [60 x i8] c"-D\09output date, user, and directory comments to the archive\00"
@.str.12 = [34 x i8] c"-c\09start the shar with 'cut here'\00"
@.str.13 = [46 x i8] c"-f\09restore by filename only, rather than path\00"
@.str.14 = [47 x i8] c"-dXXX\09use XXX to delimit the files in the shar\00"
@.str.15 = [50 x i8] c"-oXXX\09(or -o XXX) output to file XXX01 thru XXXnn\00"
@.str.16 = [41 x i8] c"-lXX\09limit output file size to XXk bytes\00"
@.str.17 = [54 x i8] c"\0AThe 'o' option is required if the 'l' option is used\00"
@stderr = global i32 0
@.str.18 = [48 x i8] c"\0AFormat:\0A %s [ options ] file [ file1 ... ] ]\0A\00"
@.str.19 = [6 x i8] c"shar2\00"
@.str.20 = [4 x i8] c"%s\0A\00"
define i32 @helpuser() {
%1 = alloca i8**
%2 = load i32, i32* @stderr
%3 = call i32 @fprintf(i32 %2, i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.18, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0))
store i8** getelementptr inbounds ([19 x i8*], [19 x i8*]* @helpuser.helpinfo, i64 0, i64 0), i8*** %1
br label %4
4: ; preds = %13, %0
%5 = load i8**, i8*** %1
%6 = load i8*, i8** %5
%7 = icmp ne i8* %6, null
br i1 %7, label %8, label %16
8: ; preds = %4
%9 = load i32, i32* @stderr
%10 = load i8**, i8*** %1
%11 = load i8*, i8** %10
%12 = call i32 @fprintf(i32 %9, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* %11)
br label %13
13: ; preds = %8
%14 = load i8**, i8*** %1
%15 = getelementptr inbounds i8*, i8** %14, i32 1
store i8** %15, i8*** %1
br label %4
16: ; preds = %4
%17 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@.str = [36 x i8] c"-v\09verbose messages while executing\00"
@.str.1 = [39 x i8] c"-s\09do checking with 'sum' after unpack\00"
@.str.2 = [34 x i8] c"-x\09don't overwrite existing files\00"
@.str.3 = [43 x i8] c"-b\09treat all files as binary, use uuencode\00"
@.str.4 = [37 x i8] c"-t\09treat all files as text (default)\00"
@.str.5 = [56 x i8] c"-p\09allow positional parameter options. The options \22-b\22\00"
@.str.6 = [57 x i8] c"\09and \22-t\22 may be embedded, and files to the right of the\00"
@.str.7 = [48 x i8] c"\09option will be processed in the specified mode\00"
@.str.8 = [36 x i8] c"-m\09mkdirs are disabled for restoral\00"
@.str.9 = [50 x i8] c"-M\09mixed mode. Determine if the files are text or\00"
@.str.10 = [31 x i8] c"\09binary and archive correctly.\00"
@.str.11 = [60 x i8] c"-D\09output date, user, and directory comments to the archive\00"
@.str.12 = [34 x i8] c"-c\09start the shar with 'cut here'\00"
@.str.13 = [46 x i8] c"-f\09restore by filename only, rather than path\00"
@.str.14 = [47 x i8] c"-dXXX\09use XXX to delimit the files in the shar\00"
@.str.15 = [50 x i8] c"-oXXX\09(or -o XXX) output to file XXX01 thru XXXnn\00"
@.str.16 = [41 x i8] c"-lXX\09limit output file size to XXk bytes\00"
@.str.17 = [54 x i8] c"\0AThe 'o' option is required if the 'l' option is used\00"
@stderr = global i32 0
@.str.18 = [48 x i8] c"\0AFormat:\0A %s [ options ] file [ file1 ... ] ]\0A\00"
@.str.19 = [6 x i8] c"shar2\00"
@.str.20 = [4 x i8] c"%s\0A\00"
define i32 @helpuser() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.18, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0))
%3 = load i32, i32* @stderr
%4 = tail call i32 @fprintf(i32 %3, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str, i64 0, i64 0))
%5 = load i32, i32* @stderr
%6 = tail call i32 @fprintf(i32 %5, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.1, i64 0, i64 0))
%7 = load i32, i32* @stderr
%8 = tail call i32 @fprintf(i32 %7, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.2, i64 0, i64 0))
%9 = load i32, i32* @stderr
%10 = tail call i32 @fprintf(i32 %9, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.3, i64 0, i64 0))
%11 = load i32, i32* @stderr
%12 = tail call i32 @fprintf(i32 %11, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.4, i64 0, i64 0))
%13 = load i32, i32* @stderr
%14 = tail call i32 @fprintf(i32 %13, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.5, i64 0, i64 0))
%15 = load i32, i32* @stderr
%16 = tail call i32 @fprintf(i32 %15, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.6, i64 0, i64 0))
%17 = load i32, i32* @stderr
%18 = tail call i32 @fprintf(i32 %17, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.7, i64 0, i64 0))
%19 = load i32, i32* @stderr
%20 = tail call i32 @fprintf(i32 %19, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.8, i64 0, i64 0))
%21 = load i32, i32* @stderr
%22 = tail call i32 @fprintf(i32 %21, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.9, i64 0, i64 0))
%23 = load i32, i32* @stderr
%24 = tail call i32 @fprintf(i32 %23, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.10, i64 0, i64 0))
%25 = load i32, i32* @stderr
%26 = tail call i32 @fprintf(i32 %25, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.11, i64 0, i64 0))
%27 = load i32, i32* @stderr
%28 = tail call i32 @fprintf(i32 %27, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.12, i64 0, i64 0))
%29 = load i32, i32* @stderr
%30 = tail call i32 @fprintf(i32 %29, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.13, i64 0, i64 0))
%31 = load i32, i32* @stderr
%32 = tail call i32 @fprintf(i32 %31, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.14, i64 0, i64 0))
%33 = load i32, i32* @stderr
%34 = tail call i32 @fprintf(i32 %33, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.15, i64 0, i64 0))
%35 = load i32, i32* @stderr
%36 = tail call i32 @fprintf(i32 %35, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.16, i64 0, i64 0))
%37 = load i32, i32* @stderr
%38 = tail call i32 @fprintf(i32 %37, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.17, i64 0, i64 0))
%39 = tail call i32 @exit(i32 1)
unreachable
}