1817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose/* Area:	ffi_call
2817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose   Purpose:	Check return value unsigned char.
3817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose   Limitations:	none.
4817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose   PR:		none.
5817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose   Originator:	From the original ffitest.c  */
6817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
7817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose/* { dg-do run } */
8817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#include "ffitest.h"
9817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
10817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klosestatic unsigned char return_uc(unsigned char uc)
11817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose{
12817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  return uc;
13817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose}
14817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
15817acef0e6c6b33ade68132b090ea745badbbeceMatthias Kloseint main (void)
16817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose{
17817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  ffi_cif cif;
18817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  ffi_type *args[MAX_ARGS];
19817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  void *values[MAX_ARGS];
20817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  ffi_arg rint;
21817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
22817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  unsigned char uc;
23817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
24817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  args[0] = &ffi_type_uchar;
25817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  values[0] = &uc;
26817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
27817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  /* Initialize the cif */
28817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
29817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose		     &ffi_type_uchar, args) == FFI_OK);
30817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
31817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  for (uc = (unsigned char) '\x00';
32817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose       uc < (unsigned char) '\xff'; uc++)
33817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose    {
34817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose      ffi_call(&cif, FFI_FN(return_uc), &rint, values);
3546ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith      CHECK((unsigned char)rint == uc);
36817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose    }
37817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose  exit(0);
38817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose}
39