#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*/ printf(char *, int, int, int, int, int, int, int, int, int,
                          int, int, int, int, int, int, int);
int main(void) {
  char c;
  short s;
  int i;
  long l;
  float f;
  double d;
  long double ld;
  int array[20];
  int *ptr = array;
  printf("     sizeof c = %d\tsizeof(char)  = %d"
         "\n     sizeof s = %d\tsizeof(short) = %d"
         "\n     sizeof i = %d\tsizeof(int) = %d"
         "\n     sizeof l = %d\tsizeof(long) = %d"
         "\n     sizeof f = %d\tsizeof(float) = %d"
         "\n     sizeof d = %d\tsizeof(double) = %d"
         "\n    sizeof ld = %d\tsizeof(long double) = %d"
         "\n sizeof array = %d"
         "\n   sizeof ptr = %d\n",
         sizeof c, sizeof(char), sizeof s, sizeof(short), sizeof i, sizeof(int),
         sizeof l, sizeof(long), sizeof f, sizeof(float), sizeof d,
         sizeof(double), sizeof ld, sizeof(long double), sizeof array,
         sizeof ptr);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x90(%rbp),%rax
mov    %rax,-0x98(%rbp)
lea    0xec9(%rip),%rdi
mov    $0x1,%edx
mov    $0x2,%r8d
mov    $0x4,%r9d
mov    %edx,%esi
mov    %r8d,%ecx
movl   $0x4,(%rsp)
movl   $0x8,0x8(%rsp)
movl   $0x8,0x10(%rsp)
movl   $0x4,0x18(%rsp)
movl   $0x4,0x20(%rsp)
movl   $0x8,0x28(%rsp)
movl   $0x8,0x30(%rsp)
movl   $0x10,0x38(%rsp)
movl   $0x10,0x40(%rsp)
movl   $0x50,0x48(%rsp)
movl   $0x8,0x50(%rsp)
call   1030 <printf@plt>
xor    %eax,%eax
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
sub    $0x8,%rsp
lea    0xee4(%rip),%rdi
mov    $0x1,%esi
mov    $0x1,%edx
mov    $0x2,%ecx
mov    $0x2,%r8d
mov    $0x4,%r9d
push   $0x8
push   $0x50
push   $0x10
push   $0x10
push   $0x8
push   $0x8
push   $0x4
push   $0x4
push   $0x8
push   $0x8
push   $0x4
call   1030 <printf@plt>
add    $0x60,%rsp
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [309 x i8] c" sizeof c = %d\09sizeof(char) = %d\0A sizeof s = %d\09sizeof(short) = %d\0A sizeof i = %d\09sizeof(int) = %d\0A sizeof l = %d\09sizeof(long) = %d\0A sizeof f = %d\09sizeof(float) = %d\0A sizeof d = %d\09sizeof(double) = %d\0A sizeof ld = %d\09sizeof(long double) = %d\0A sizeof array = %d\0A sizeof ptr = %d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8
%3 = alloca i16
%4 = alloca i32
%5 = alloca i64
%6 = alloca float
%7 = alloca double
%8 = alloca x86_fp80
%9 = alloca [20 x i32]
%10 = alloca i32*
store i32 0, i32* %1
%11 = getelementptr inbounds [20 x i32], [20 x i32]* %9, i64 0, i64 0
store i32* %11, i32** %10
%12 = call i32 @printf(i8* getelementptr inbounds ([309 x i8], [309 x i8]* @.str, i64 0, i64 0), i32 1, i32 1, i32 2, i32 2, i32 4, i32 4, i32 8, i32 8, i32 4, i32 4, i32 8, i32 8, i32 16, i32 16, i32 80, i32 8)
ret i32 0
}

LLVM IR (-O2):
@.str = [309 x i8] c" sizeof c = %d\09sizeof(char) = %d\0A sizeof s = %d\09sizeof(short) = %d\0A sizeof i = %d\09sizeof(int) = %d\0A sizeof l = %d\09sizeof(long) = %d\0A sizeof f = %d\09sizeof(float) = %d\0A sizeof d = %d\09sizeof(double) = %d\0A sizeof ld = %d\09sizeof(long double) = %d\0A sizeof array = %d\0A sizeof ptr = %d\0A\00"
define i32 @main() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([309 x i8], [309 x i8]* @.str, i64 0, i64 0), i32 1, i32 1, i32 2, i32 2, i32 4, i32 4, i32 8, i32 8, i32 4, i32 4, i32 8, i32 8, i32 16, i32 16, i32 80, i32 8)
ret i32 0
}