github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/third_party/gofrontend/libffi/testsuite/libffi.call/negint.c (about)

     1  /* Area:	ffi_call
     2     Purpose:	Check that negative integers are passed correctly.
     3     Limitations:	none.
     4     PR:		none.
     5     Originator:	From the original ffitest.c  */
     6  
     7  /* { dg-do run } */
     8  
     9  #include "ffitest.h"
    10  
    11  static int checking(int a, short b, signed char c)
    12  {
    13  
    14    return (a < 0 && b < 0 && c < 0);
    15  }
    16  
    17  int main (void)
    18  {
    19    ffi_cif cif;
    20    ffi_type *args[MAX_ARGS];
    21    void *values[MAX_ARGS];
    22    ffi_arg rint;
    23  
    24    signed int si;
    25    signed short ss;
    26    signed char sc;
    27  
    28    args[0] = &ffi_type_sint;
    29    values[0] = &si;
    30    args[1] = &ffi_type_sshort;
    31    values[1] = &ss;
    32    args[2] = &ffi_type_schar;
    33    values[2] = &sc;
    34  
    35    /* Initialize the cif */
    36    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
    37  		     &ffi_type_sint, args) == FFI_OK);
    38  
    39    si = -6;
    40    ss = -12;
    41    sc = -1;
    42  
    43    checking (si, ss, sc);
    44  
    45    ffi_call(&cif, FFI_FN(checking), &rint, values);
    46  
    47    printf ("%d vs %d\n", (int)rint, checking (si, ss, sc));
    48  
    49    CHECK(rint != 0);
    50  
    51    exit (0);
    52  }