1817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose/* Area:		ffi_prep_cif, ffi_prep_closure
2817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose   Purpose:		Test error return for bad ABIs.
3817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose   Limitations:	none.
4817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose   PR:			none.
5817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose   Originator:	Blake Chaffin 6/6/2007	 */
6817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
746ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith/* { dg-do run } */
846ce27ab1e22ca98957e0900c6a2415b86578b2eGregory P. Smith
9817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose#include "ffitest.h"
10817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
11817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klosestatic void
12817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klosedummy_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
13817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	 void** args __UNUSED__, void* userdata __UNUSED__)
14817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose{}
15817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
16817acef0e6c6b33ade68132b090ea745badbbeceMatthias Kloseint main (void)
17817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose{
18817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	ffi_cif cif;
19817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose        void *code;
20817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
21817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	ffi_type* arg_types[1];
22817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
23817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	arg_types[0] = NULL;
24817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
25817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	CHECK(ffi_prep_cif(&cif, 255, 0, &ffi_type_void,
26817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose		arg_types) == FFI_BAD_ABI);
27817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
28817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &ffi_type_void,
29817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose		arg_types) == FFI_OK);
30817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
31817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	cif.abi= 255;
32817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
33817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	CHECK(ffi_prep_closure_loc(pcl, &cif, dummy_fn, NULL, code) == FFI_BAD_ABI);
34817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose
35817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose	exit(0);
36817acef0e6c6b33ade68132b090ea745badbbeceMatthias Klose}
37