#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*/ strcpy(char *, char *);
void GetVersion(char *p) {
  unsigned char version[32] = {
      (1 + '0'),
      '.',
      (1 + '0'),
      '-',
      'D',
      ("Mar 18 2022"[7]),
      ("Mar 18 2022"[8]),
      ("Mar 18 2022"[9]),
      ("Mar 18 2022"[10]),
      ((("Mar 18 2022"[0] == 'O') || ("Mar 18 2022"[0] == 'N') ||
        ("Mar 18 2022"[0] == 'D'))
           ? '1'
           : '0'),
      ((("Mar 18 2022"[0] == 'J' && "Mar 18 2022"[1] == 'a' &&
         "Mar 18 2022"[2] == 'n'))
           ? '1'
       : (("Mar 18 2022"[0] == 'F')) ? '2'
       : (("Mar 18 2022"[0] == 'M' && "Mar 18 2022"[1] == 'a' &&
           "Mar 18 2022"[2] == 'r'))
           ? '3'
       : (("Mar 18 2022"[0] == 'A' && "Mar 18 2022"[1] == 'p')) ? '4'
       : (("Mar 18 2022"[0] == 'M' && "Mar 18 2022"[1] == 'a' &&
           "Mar 18 2022"[2] == 'y'))
           ? '5'
       : (("Mar 18 2022"[0] == 'J' && "Mar 18 2022"[1] == 'u' &&
           "Mar 18 2022"[2] == 'n'))
           ? '6'
       : (("Mar 18 2022"[0] == 'J' && "Mar 18 2022"[1] == 'u' &&
           "Mar 18 2022"[2] == 'l'))
           ? '7'
       : (("Mar 18 2022"[0] == 'A' && "Mar 18 2022"[1] == 'u')) ? '8'
       : (("Mar 18 2022"[0] == 'S'))                            ? '9'
       : (("Mar 18 2022"[0] == 'O'))                            ? '0'
       : (("Mar 18 2022"[0] == 'N'))                            ? '1'
       : (("Mar 18 2022"[0] == 'D'))                            ? '2'
                                                                : '?'),
      (("Mar 18 2022"[4] >= '0') ? ("Mar 18 2022"[4]) : '0'),
      ("Mar 18 2022"[5]),
      'T',
      ("01:25:54"[0]),
      ("01:25:54"[1]),
      ("01:25:54"[3]),
      ("01:25:54"[4]),
      ("01:25:54"[6]),
      ("01:25:54"[7]),
      '\0'};
  strcpy(p, (char *)version);
}


x86 assembly (clang, -O0):
<GetVersion>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    0xedd(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    0xeda(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0xed7(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xed4(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
lea    -0x30(%rbp),%rsi
call   1030 <strcpy@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<GetVersion>:
sub    $0x28,%rsp
movaps 0xef5(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xed9(%rip),%xmm0
movaps %xmm0,(%rsp)
mov    %rsp,%rsi
call   1030 <strcpy@plt>
add    $0x28,%rsp
ret

LLVM IR (-O0):
@__const.GetVersion.version = <{ [20 x i8], [12 x i8] }> <{ [20 x i8] c"1.1-D20220318T012554", [12 x i8] zeroinitializer }>
define void @GetVersion(i8* %0) {
%2 = alloca i8*
%3 = alloca [32 x i8]
store i8* %0, i8** %2
%4 = bitcast [32 x i8]* %3 to i8*
%5 = load i8*, i8** %2
%6 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%7 = call i32 @strcpy(i8* %5, i8* %6)
ret void
}

LLVM IR (-O2):
@__const.GetVersion.version = <{ [20 x i8], [12 x i8] }> <{ [20 x i8] c"1.1-D20220318T012554", [12 x i8] zeroinitializer }>
define void @GetVersion(i8* %0) {
%2 = alloca [32 x i8]
%3 = getelementptr inbounds [32 x i8], [32 x i8]* %2, i64 0, i64 0
%4 = call i32 @strcpy(i8* %0, i8* %3)
ret void
}