#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*/ asctime_s(int, int, int);
int /*<<< orphan*/ isalnum(int);
int /*<<< orphan*/ isalpha(int);
int /*<<< orphan*/ isblank(int);
int /*<<< orphan*/ iscntrl(int);
int /*<<< orphan*/ isdigit(int);
int /*<<< orphan*/ isgraph(int);
int /*<<< orphan*/ islower(int);
int /*<<< orphan*/ isprint(int);
int /*<<< orphan*/ ispunct(int);
int /*<<< orphan*/ isspace(int);
int /*<<< orphan*/ isupper(int);
int /*<<< orphan*/ isxdigit(int);
int /*<<< orphan*/ strcpy_s(int, int /*<<< orphan*/, char *);
int /*<<< orphan*/ tolower(int);
int /*<<< orphan*/ toupper(int);
void invalidFunctionArg(char c) {
  asctime_s(1, 24, 1);
  (void)isalnum(256);
  (void)isalnum(-1);
  (void)isalnum(c);
  (void)isalnum(0);
  (void)isalnum(255);
  (void)isalpha(256);
  (void)isalpha(-1);
  (void)isalpha(c);
  (void)isalpha(0);
  (void)isalpha(255);
  (void)isblank(256);
  (void)isblank(-1);
  (void)isblank(c);
  (void)isblank(0);
  (void)isblank(255);
  (void)iscntrl(256);
  (void)iscntrl(-1);
  (void)iscntrl(c);
  (void)iscntrl(0);
  (void)iscntrl(255);
  (void)isdigit(256);
  (void)isdigit(-1);
  (void)isdigit(c);
  (void)isdigit(0);
  (void)isdigit(255);
  (void)isgraph(256);
  (void)isgraph(-1);
  (void)isgraph(c);
  (void)isgraph(0);
  (void)isgraph(255);
  (void)islower(256);
  (void)islower(-1);
  (void)islower(c);
  (void)islower(0);
  (void)islower(255);
  (void)isupper(256);
  (void)isupper(-1);
  (void)isupper(c);
  (void)isupper(0);
  (void)isupper(255);
  (void)isprint(256);
  (void)isprint(-1);
  (void)isprint(c);
  (void)isprint(0);
  (void)isprint(255);
  (void)ispunct(256);
  (void)ispunct(-1);
  (void)ispunct(c);
  (void)ispunct(0);
  (void)ispunct(255);
  (void)isspace(256);
  (void)isspace(-1);
  (void)isspace(c);
  (void)isspace(0);
  (void)isspace(255);
  (void)isxdigit(256);
  (void)isxdigit(-1);
  (void)isxdigit(c);
  (void)isxdigit(0);
  (void)isxdigit(255);
  (void)tolower(256);
  (void)tolower(-1);
  (void)tolower(c);
  (void)tolower(0);
  (void)tolower(255);
  (void)toupper(256);
  (void)toupper(-1);
  (void)toupper(c);
  (void)toupper(0);
  (void)toupper(255);
  (void)strcpy_s(1, 0, "a");
}


x86 assembly (clang, -O0):
<invalidFunctionArg>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %dil,%al
mov    %al,-0x1(%rbp)
mov    $0x1,%edx
mov    $0x18,%esi
mov    %edx,%edi
call   1030 <asctime_s@plt>
mov    $0x1,%edi
xor    %esi,%esi
lea    0xeb3(%rip),%rdx
call   1040 <strcpy_s@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<invalidFunctionArg>:
push   %rax
mov    $0x1,%edi
mov    $0x18,%esi
mov    $0x1,%edx
call   1030 <asctime_s@plt>
lea    0xec4(%rip),%rdx
mov    $0x1,%edi
xor    %esi,%esi
pop    %rax
jmp    1040 <strcpy_s@plt>

LLVM IR (-O0):
@.str = [2 x i8] c"a\00"
define void @invalidFunctionArg(i8 signext %0) {
%2 = alloca i8
store i8 %0, i8* %2
%3 = call i32 @asctime_s(i32 1, i32 24, i32 1)
%4 = call i32 @isalnum(i32 256)
%5 = call i32 @isalnum(i32 -1)
%6 = load i8, i8* %2
%7 = sext i8 %6 to i32
%8 = call i32 @isalnum(i32 %7)
%9 = call i32 @isalnum(i32 0)
%10 = call i32 @isalnum(i32 255)
%11 = call i32 @isalpha(i32 256)
%12 = call i32 @isalpha(i32 -1)
%13 = load i8, i8* %2
%14 = sext i8 %13 to i32
%15 = call i32 @isalpha(i32 %14)
%16 = call i32 @isalpha(i32 0)
%17 = call i32 @isalpha(i32 255)
%18 = call i32 @isblank(i32 256)
%19 = call i32 @isblank(i32 -1)
%20 = load i8, i8* %2
%21 = sext i8 %20 to i32
%22 = call i32 @isblank(i32 %21)
%23 = call i32 @isblank(i32 0)
%24 = call i32 @isblank(i32 255)
%25 = call i32 @iscntrl(i32 256)
%26 = call i32 @iscntrl(i32 -1)
%27 = load i8, i8* %2
%28 = sext i8 %27 to i32
%29 = call i32 @iscntrl(i32 %28)
%30 = call i32 @iscntrl(i32 0)
%31 = call i32 @iscntrl(i32 255)
%32 = call i32 @isdigit(i32 256)
%33 = call i32 @isdigit(i32 -1)
%34 = load i8, i8* %2
%35 = sext i8 %34 to i32
%36 = call i32 @isdigit(i32 %35)
%37 = call i32 @isdigit(i32 0)
%38 = call i32 @isdigit(i32 255)
%39 = call i32 @isgraph(i32 256)
%40 = call i32 @isgraph(i32 -1)
%41 = load i8, i8* %2
%42 = sext i8 %41 to i32
%43 = call i32 @isgraph(i32 %42)
%44 = call i32 @isgraph(i32 0)
%45 = call i32 @isgraph(i32 255)
%46 = call i32 @islower(i32 256)
%47 = call i32 @islower(i32 -1)
%48 = load i8, i8* %2
%49 = sext i8 %48 to i32
%50 = call i32 @islower(i32 %49)
%51 = call i32 @islower(i32 0)
%52 = call i32 @islower(i32 255)
%53 = call i32 @isupper(i32 256)
%54 = call i32 @isupper(i32 -1)
%55 = load i8, i8* %2
%56 = sext i8 %55 to i32
%57 = call i32 @isupper(i32 %56)
%58 = call i32 @isupper(i32 0)
%59 = call i32 @isupper(i32 255)
%60 = call i32 @isprint(i32 256)
%61 = call i32 @isprint(i32 -1)
%62 = load i8, i8* %2
%63 = sext i8 %62 to i32
%64 = call i32 @isprint(i32 %63)
%65 = call i32 @isprint(i32 0)
%66 = call i32 @isprint(i32 255)
%67 = call i32 @ispunct(i32 256)
%68 = call i32 @ispunct(i32 -1)
%69 = load i8, i8* %2
%70 = sext i8 %69 to i32
%71 = call i32 @ispunct(i32 %70)
%72 = call i32 @ispunct(i32 0)
%73 = call i32 @ispunct(i32 255)
%74 = call i32 @isspace(i32 256)
%75 = call i32 @isspace(i32 -1)
%76 = load i8, i8* %2
%77 = sext i8 %76 to i32
%78 = call i32 @isspace(i32 %77)
%79 = call i32 @isspace(i32 0)
%80 = call i32 @isspace(i32 255)
%81 = call i32 @isxdigit(i32 256)
%82 = call i32 @isxdigit(i32 -1)
%83 = load i8, i8* %2
%84 = sext i8 %83 to i32
%85 = call i32 @isxdigit(i32 %84)
%86 = call i32 @isxdigit(i32 0)
%87 = call i32 @isxdigit(i32 255)
%88 = call i32 @tolower(i32 256)
%89 = call i32 @tolower(i32 -1)
%90 = load i8, i8* %2
%91 = sext i8 %90 to i32
%92 = call i32 @tolower(i32 %91)
%93 = call i32 @tolower(i32 0)
%94 = call i32 @tolower(i32 255)
%95 = call i32 @toupper(i32 256)
%96 = call i32 @toupper(i32 -1)
%97 = load i8, i8* %2
%98 = sext i8 %97 to i32
%99 = call i32 @toupper(i32 %98)
%100 = call i32 @toupper(i32 0)
%101 = call i32 @toupper(i32 255)
%102 = call i32 @strcpy_s(i32 1, i32 0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [2 x i8] c"a\00"
define void @invalidFunctionArg(i8 signext %0) {
%2 = tail call i32 @asctime_s(i32 1, i32 24, i32 1)
%3 = tail call i32 @strcpy_s(i32 1, i32 0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
ret void
}