#!/bin/bash

cat<<END > testlib.c
static int __attribute__((__noinline__)) put_in_eax(int v) { return v; }
_Bool          test_bool  (int v) { return put_in_eax(v) == 0; }
char           test_char  (int v) { return put_in_eax(v); }
short          test_short (int v) { return put_in_eax(v); }
unsigned char  test_uchar (int v) { return put_in_eax(v); }
unsigned short test_ushort(int v) { return put_in_eax(v); }
END

cat<<END > main.c
#include <stdio.h>
extern _Bool          test_bool  (int);
extern char           test_char  (int);
extern short          test_short (int);
extern unsigned char  test_uchar (int);
extern unsigned short test_ushort(int);
int main() {
  printf("\ttest_bool  (256)   returns %s\n", test_bool  (256)    ? "true" : "false");
  printf("\ttest_char  (256)   returns %s\n", test_char  (256)    ? "true" : "false");
  printf("\ttest_short (65536) returns %s\n", test_short (65536)  ? "true" : "false");
  printf("\ttest_uchar (256)   returns %s\n", test_uchar (256)    ? "true" : "false");
  printf("\ttest_ushort(65536) returns %s\n", test_ushort(65536)  ? "true" : "false");
}
END

gcc -o libtestlib.so -shared testlib.c
gcc -o gcc_main -L. -ltestlib main.c
tcc -o tcc_main -L. -ltestlib main.c

echo "Run executable compiled using GCC:"
LD_LIBRARY_PATH=. ./gcc_main
echo "Run executable compiled using TCC:"
LD_LIBRARY_PATH=. ./tcc_main
