110 lines · 1.8 KB · C
RawDownload
#include <stdio.h> struct big_struct { char a[262144]; }; static const char str[] = "abcdefghijklmnopqrstuvwxyz"; void tst_branch(void){  printf("tst_branch --");  goto *&&a;   printf (" dummy");a: ;  printf(" --\n");} void tst_void_ptr(void *pv, int i) {  i ? *pv : *pv; // dr106} void tst_shift(void){  int i = 1;  long long l = 1;  i = i << 32; // illegal. just test  l = l << 64; // illegal. just test} #if !defined(_WIN32)#include <sys/mman.h> void tst_const_addr(void){  void *addr = mmap ((void *)0x20000000, 4096, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_ANONYMOUS, -1, 0);  if (addr != (void *) -1) {#if !defined(__riscv)    *(int *)0x20000000 += 42;#endif    munmap (addr, 4096);  }}#endif struct zero_struct {}; struct zero_struct tst_zero_struct(void){  struct zero_struct ret;  return ret;} struct big_struct tst_big(struct big_struct tst){   return tst;} void tst_adr (int (*fp)(char *, const char *, ...)){  char buf[10];  (*fp)(buf, "%.0f", 5.0);  printf("tst_adr %s\n", buf);} int tst(void){  long long value = 3;  return -value;} void tst_compare(void){  /* This failed on risc64 */  printf ("tst_compare: %s\n", tst() > 0 ? "error" : "ok");} #pragma pack(1)struct S { int d:24; int f:14; } i, j;#pragma pack() void tst_pack (void){  i.f = 5; j.f = 5;  printf("tst_pack: j.f = %d, i.f = %d\n", j.f, i.f);} void tst_cast(void){  signed char c = (signed char) 0xaaaaaaaa;  int r = (unsigned short) c ^ (signed char) 0x99999999;  printf ("schar to ushort cast: %x\n", r);} intmain (void){  struct big_struct big;   tst_branch();  tst_shift();  tst_void_ptr(&big.a[0], 0);#if !defined(_WIN32)  tst_const_addr();#endif  tst_zero_struct();  tst_big(big);  tst_adr(&sprintf);  tst_compare();  tst_pack();  tst_cast();}