#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 */
typedef int /*<<< orphan*/ time_t;

/* Variables and functions */
int /*<<< orphan*/ printf(char *, char *, unsigned long, ...);
int main(void) {
  do {
    printf("%s -- min: %ld, max: %ld\n", "signed char",
           (-(1L << ((sizeof(signed char) * 8) - 1))),
           ((1L << ((sizeof(signed char) * 8) - 1)) - 1L));
  } while (0);
  do {
    printf("%s -- min: %ld, max: %ld\n", "short",
           (-(1L << ((sizeof(short) * 8) - 1))),
           ((1L << ((sizeof(short) * 8) - 1)) - 1L));
  } while (0);
  do {
    printf("%s -- min: %ld, max: %ld\n", "int",
           (-(1L << ((sizeof(int) * 8) - 1))),
           ((1L << ((sizeof(int) * 8) - 1)) - 1L));
  } while (0);
  do {
    printf("%s -- min: %ld, max: %ld\n", "long",
           (-(1L << ((sizeof(long) * 8) - 1))),
           ((1L << ((sizeof(long) * 8) - 1)) - 1L));
  } while (0);
  do {
    printf("%s -- min: %ld, max: %ld\n", "long long",
           (-(1L << ((sizeof(long long) * 8) - 1))),
           ((1L << ((sizeof(long long) * 8) - 1)) - 1L));
  } while (0);
  do {
    printf("%s -- min: %ld, max: %ld\n", "time_t",
           (-(1L << ((sizeof(time_t) * 8) - 1))),
           ((1L << ((sizeof(time_t) * 8) - 1)) - 1L));
  } while (0);
  do {
    printf("%s -- min: 0, max: %lu\n", "unsigned char",
           ((1UL << (sizeof(unsigned char) * 8)) - 1UL));
  } while (0);
  do {
    printf("%s -- min: 0, max: %lu\n", "unsigned short",
           ((1UL << (sizeof(unsigned short) * 8)) - 1UL));
  } while (0);
  do {
    printf("%s -- min: 0, max: %lu\n", "unsigned int",
           ((1UL << (sizeof(unsigned int) * 8)) - 1UL));
  } while (0);
  do {
    printf("%s -- min: 0, max: %lu\n", "unsigned long",
           ((1UL << (sizeof(unsigned long) * 8)) - 1UL));
  } while (0);
  do {
    printf("%s -- min: 0, max: %lu\n", "unsigned long long",
           ((1UL << (sizeof(unsigned long long) * 8)) - 1UL));
  } while (0);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeda(%rip),%rdi
lea    0xf0e(%rip),%rsi
mov    $0xffffffffffffff80,%rdx
mov    $0x7f,%ecx
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1145 <main+0x35>
lea    0xeb4(%rip),%rdi
lea    0xefd(%rip),%rsi
mov    $0xffffffffffff8000,%rdx
mov    $0x7fff,%ecx
mov    $0x0,%al
call   1030 <printf@plt>
jmp    116b <main+0x5b>
lea    0xe8e(%rip),%rdi
lea    0xee6(%rip),%rsi
mov    $0xffffffff80000000,%rdx
mov    $0x7fffffff,%ecx
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1191 <main+0x81>
lea    0xe68(%rip),%rdi
lea    0xecd(%rip),%rsi
movabs $0x8000000000000000,%rdx
movabs $0x7fffffffffffffff,%rcx
ff ff 7f
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11bf <main+0xaf>
lea    0xe3a(%rip),%rdi
lea    0xead(%rip),%rsi
movabs $0x8000000000000000,%rdx
movabs $0x7fffffffffffffff,%rcx
ff ff 7f
mov    $0x0,%al
call   1030 <printf@plt>
jmp    11ed <main+0xdd>
lea    0xe0c(%rip),%rdi
lea    0xe1f(%rip),%rsi
mov    $0xffffffff80000000,%rdx
mov    $0x7fffffff,%ecx
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1213 <main+0x103>
lea    0xe07(%rip),%rdi
lea    0xe18(%rip),%rsi
mov    $0xff,%edx
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1232 <main+0x122>
lea    0xde8(%rip),%rdi
lea    0xe07(%rip),%rsi
mov    $0xffff,%edx
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1251 <main+0x141>
lea    0xdc9(%rip),%rdi
lea    0xdf7(%rip),%rsi
mov    $0xffffffff,%edx
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1270 <main+0x160>
lea    0xdaa(%rip),%rdi
lea    0xde5(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    128a <main+0x17a>
lea    0xd90(%rip),%rdi
lea    0xdd9(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %rbx
lea    0xee4(%rip),%r14
lea    0xf18(%rip),%rsi
mov    $0x7f,%ecx
mov    %r14,%rdi
mov    $0xffffffffffffff80,%rdx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf10(%rip),%rsi
mov    $0x7fff,%ecx
mov    %r14,%rdi
mov    $0xffffffffffff8000,%rdx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xf02(%rip),%rsi
mov    $0x7fffffff,%ecx
mov    %r14,%rdi
mov    $0xffffffff80000000,%rdx
xor    %eax,%eax
call   1030 <printf@plt>
movabs $0x7fffffffffffffff,%r15
ff ff 7f
lea    0x1(%r15),%rbx
lea    0xee4(%rip),%rsi
mov    %r14,%rdi
mov    %rbx,%rdx
mov    %r15,%rcx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xedb(%rip),%rsi
mov    %r14,%rdi
mov    %rbx,%rdx
mov    %r15,%rcx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xe64(%rip),%rsi
mov    $0x7fffffff,%ecx
mov    %r14,%rdi
mov    $0xffffffff80000000,%rdx
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xe4e(%rip),%rbx
lea    0xe5f(%rip),%rsi
mov    $0xff,%edx
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xe57(%rip),%rsi
mov    $0xffff,%edx
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xe50(%rip),%rsi
mov    $0xffffffff,%edx
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xe47(%rip),%rsi
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xe44(%rip),%rsi
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <printf@plt>
xor    %eax,%eax
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [26 x i8] c"%s -- min: %ld, max: %ld\0A\00"
@.str.1 = [12 x i8] c"signed char\00"
@.str.2 = [6 x i8] c"short\00"
@.str.3 = [4 x i8] c"int\00"
@.str.4 = [5 x i8] c"long\00"
@.str.5 = [10 x i8] c"long long\00"
@.str.6 = [7 x i8] c"time_t\00"
@.str.7 = [24 x i8] c"%s -- min: 0, max: %lu\0A\00"
@.str.8 = [14 x i8] c"unsigned char\00"
@.str.9 = [15 x i8] c"unsigned short\00"
@.str.10 = [13 x i8] c"unsigned int\00"
@.str.11 = [14 x i8] c"unsigned long\00"
@.str.12 = [19 x i8] c"unsigned long long\00"
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
br label %2
2: ; preds = %0
%3 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i64 -128, i64 127)
br label %4
4: ; preds = %2
br label %5
5: ; preds = %4
%6 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i64 -32768, i64 32767)
br label %7
7: ; preds = %5
br label %8
8: ; preds = %7
%9 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i64 -2147483648, i64 2147483647)
br label %10
10: ; preds = %8
br label %11
11: ; preds = %10
%12 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0), i64 -9223372036854775808, i64 9223372036854775807)
br label %13
13: ; preds = %11
br label %14
14: ; preds = %13
%15 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i64 0, i64 0), i64 -9223372036854775808, i64 9223372036854775807)
br label %16
16: ; preds = %14
br label %17
17: ; preds = %16
%18 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0), i64 -2147483648, i64 2147483647)
br label %19
19: ; preds = %17
br label %20
20: ; preds = %19
%21 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.8, i64 0, i64 0), i64 255)
br label %22
22: ; preds = %20
br label %23
23: ; preds = %22
%24 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.9, i64 0, i64 0), i64 65535)
br label %25
25: ; preds = %23
br label %26
26: ; preds = %25
%27 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0), i64 4294967295)
br label %28
28: ; preds = %26
br label %29
29: ; preds = %28
%30 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.11, i64 0, i64 0), i64 poison)
br label %31
31: ; preds = %29
br label %32
32: ; preds = %31
%33 = call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.12, i64 0, i64 0), i64 poison)
br label %34
34: ; preds = %32
ret i32 0
}

LLVM IR (-O2):
@.str = [26 x i8] c"%s -- min: %ld, max: %ld\0A\00"
@.str.1 = [12 x i8] c"signed char\00"
@.str.2 = [6 x i8] c"short\00"
@.str.3 = [4 x i8] c"int\00"
@.str.4 = [5 x i8] c"long\00"
@.str.5 = [10 x i8] c"long long\00"
@.str.6 = [7 x i8] c"time_t\00"
@.str.7 = [24 x i8] c"%s -- min: 0, max: %lu\0A\00"
@.str.8 = [14 x i8] c"unsigned char\00"
@.str.9 = [15 x i8] c"unsigned short\00"
@.str.10 = [13 x i8] c"unsigned int\00"
@.str.11 = [14 x i8] c"unsigned long\00"
@.str.12 = [19 x i8] c"unsigned long long\00"
define i32 @main() {
%1 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i64 -128, i64 127)
%2 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0), i64 -32768, i64 32767)
%3 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i64 -2147483648, i64 2147483647)
%4 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0), i64 -9223372036854775808, i64 9223372036854775807)
%5 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i64 0, i64 0), i64 -9223372036854775808, i64 9223372036854775807)
%6 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0), i64 -2147483648, i64 2147483647)
%7 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.8, i64 0, i64 0), i64 255)
%8 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.9, i64 0, i64 0), i64 65535)
%9 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0), i64 4294967295)
%10 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.11, i64 0, i64 0), i64 poison)
%11 = tail call i32 (i8*, i8*, i64, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.12, i64 0, i64 0), i64 poison)
ret i32 0
}