ffi 1.17.2 → 1.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +34 -0
  4. data/Gemfile +7 -4
  5. data/README.md +1 -0
  6. data/Rakefile +7 -4
  7. data/Steepfile +8 -0
  8. data/ext/ffi_c/DynamicLibrary.c +1 -1
  9. data/ext/ffi_c/Function.c +2 -0
  10. data/ext/ffi_c/MethodHandle.c +4 -2
  11. data/ext/ffi_c/StructLayout.c +129 -12
  12. data/ext/ffi_c/libffi/LICENSE +1 -1
  13. data/ext/ffi_c/libffi/Makefile.am +17 -13
  14. data/ext/ffi_c/libffi/Makefile.in +37 -30
  15. data/ext/ffi_c/libffi/README.md +22 -3
  16. data/ext/ffi_c/libffi/configure +105 -121
  17. data/ext/ffi_c/libffi/configure.ac +21 -8
  18. data/ext/ffi_c/libffi/configure.host +6 -1
  19. data/ext/ffi_c/libffi/doc/Makefile.in +3 -0
  20. data/ext/ffi_c/libffi/doc/libffi.texi +24 -1
  21. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  22. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +1 -28
  23. data/ext/ffi_c/libffi/include/Makefile.in +3 -0
  24. data/ext/ffi_c/libffi/include/ffi.h.in +19 -1
  25. data/ext/ffi_c/libffi/libffi.map.in +13 -1
  26. data/ext/ffi_c/libffi/libtool-version +1 -1
  27. data/ext/ffi_c/libffi/m4/asmcfi.m4 +28 -11
  28. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +13 -3
  29. data/ext/ffi_c/libffi/man/Makefile.in +3 -0
  30. data/ext/ffi_c/libffi/src/aarch64/sysv.S +7 -1
  31. data/ext/ffi_c/libffi/src/arm/sysv.S +1 -1
  32. data/ext/ffi_c/libffi/src/pa/linux.S +4 -0
  33. data/ext/ffi_c/libffi/src/powerpc/ffi.c +6 -0
  34. data/ext/ffi_c/libffi/src/riscv/ffi.c +39 -16
  35. data/ext/ffi_c/libffi/src/riscv/internal.h +7 -0
  36. data/ext/ffi_c/libffi/src/riscv/sysv.S +24 -0
  37. data/ext/ffi_c/libffi/src/tramp.c +6 -1
  38. data/ext/ffi_c/libffi/src/types.c +23 -1
  39. data/ext/ffi_c/libffi/src/{wasm32 → wasm}/ffi.c +157 -54
  40. data/ext/ffi_c/libffi/src/{wasm32 → wasm}/ffitarget.h +17 -0
  41. data/ext/ffi_c/libffi/src/x86/ffitarget.h +0 -3
  42. data/ext/ffi_c/libffi/src/x86/sysv.S +1 -3
  43. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +1 -3
  44. data/ext/ffi_c/libffi/testsuite/Makefile.in +6 -2
  45. data/ext/ffi_c/libffi.mk +5 -0
  46. data/ffi.gemspec +7 -6
  47. data/lib/ffi/autopointer.rb +6 -0
  48. data/lib/ffi/compat.rb +11 -0
  49. data/lib/ffi/function.rb +23 -0
  50. data/lib/ffi/library.rb +19 -3
  51. data/lib/ffi/struct_by_reference.rb +1 -1
  52. data/lib/ffi/version.rb +1 -1
  53. data/samples/hello_ractor.rb +9 -1
  54. data/samples/qsort_ractor.rb +9 -1
  55. data/sig/ffi/auto_pointer.rbs +1 -1
  56. data/sig/ffi/errno.rbs +8 -0
  57. data/sig/ffi/platform.rbs +49 -0
  58. data/sig/ffi/struct.rbs +2 -2
  59. data/sig/ffi/struct_by_reference.rbs +1 -1
  60. data/sig/ffi.rbs +4 -1
  61. data.tar.gz.sig +0 -0
  62. metadata +24 -338
  63. metadata.gz.sig +0 -0
  64. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  65. data/ext/ffi_c/libffi/.appveyor/site.exp +0 -16
  66. data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +0 -7
  67. data/ext/ffi_c/libffi/.appveyor.yml +0 -84
  68. data/ext/ffi_c/libffi/.ci/ar-lib +0 -270
  69. data/ext/ffi_c/libffi/.ci/bfin-sim.exp +0 -58
  70. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +0 -18
  71. data/ext/ffi_c/libffi/.ci/build-in-container.sh +0 -10
  72. data/ext/ffi_c/libffi/.ci/build.sh +0 -124
  73. data/ext/ffi_c/libffi/.ci/compile +0 -351
  74. data/ext/ffi_c/libffi/.ci/install.sh +0 -78
  75. data/ext/ffi_c/libffi/.ci/m32r-sim.exp +0 -58
  76. data/ext/ffi_c/libffi/.ci/moxie-sim.exp +0 -60
  77. data/ext/ffi_c/libffi/.ci/msvs-detect +0 -1103
  78. data/ext/ffi_c/libffi/.ci/or1k-sim.exp +0 -58
  79. data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +0 -58
  80. data/ext/ffi_c/libffi/.ci/site.exp +0 -29
  81. data/ext/ffi_c/libffi/.ci/wine-sim.exp +0 -55
  82. data/ext/ffi_c/libffi/.gitattributes +0 -4
  83. data/ext/ffi_c/libffi/.github/issue_template.md +0 -10
  84. data/ext/ffi_c/libffi/.github/workflows/build.yml +0 -479
  85. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +0 -160
  86. data/ext/ffi_c/libffi/.gitignore +0 -46
  87. data/ext/ffi_c/libffi/testsuite/Makefile.am +0 -88
  88. data/ext/ffi_c/libffi/testsuite/config/default.exp +0 -1
  89. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +0 -34
  90. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +0 -46
  91. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +0 -86
  92. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +0 -23
  93. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +0 -7
  94. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +0 -51
  95. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +0 -682
  96. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +0 -283
  97. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +0 -45
  98. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +0 -28
  99. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +0 -78
  100. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +0 -50
  101. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +0 -63
  102. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +0 -1746
  103. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +0 -2885
  104. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +0 -747
  105. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +0 -46
  106. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +0 -46
  107. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +0 -41
  108. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +0 -54
  109. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +0 -99
  110. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +0 -108
  111. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +0 -114
  112. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +0 -119
  113. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +0 -26
  114. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +0 -163
  115. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +0 -59
  116. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +0 -60
  117. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +0 -61
  118. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +0 -74
  119. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +0 -62
  120. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +0 -110
  121. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +0 -59
  122. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +0 -57
  123. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +0 -70
  124. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +0 -78
  125. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -52
  126. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +0 -46
  127. data/ext/ffi_c/libffi/testsuite/libffi.call/overread.c +0 -54
  128. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +0 -127
  129. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +0 -59
  130. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc_tc.c +0 -114
  131. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +0 -36
  132. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +0 -43
  133. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +0 -42
  134. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +0 -35
  135. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +0 -36
  136. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +0 -49
  137. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +0 -42
  138. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +0 -34
  139. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +0 -41
  140. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +0 -48
  141. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +0 -36
  142. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +0 -42
  143. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +0 -38
  144. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +0 -42
  145. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +0 -60
  146. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +0 -43
  147. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +0 -49
  148. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +0 -49
  149. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +0 -55
  150. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +0 -67
  151. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +0 -57
  152. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +0 -67
  153. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +0 -60
  154. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +0 -64
  155. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +0 -66
  156. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +0 -64
  157. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +0 -74
  158. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +0 -81
  159. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +0 -68
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +0 -63
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +0 -65
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +0 -65
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +0 -67
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +0 -67
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +0 -93
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +0 -61
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_int_float.c +0 -88
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +0 -63
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +0 -90
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +0 -61
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +0 -78
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +0 -220
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +0 -154
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +0 -134
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +0 -135
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +0 -141
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/x32.c +0 -31
  178. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +0 -67
  179. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn0.c +0 -90
  180. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn1.c +0 -83
  181. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn2.c +0 -83
  182. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn3.c +0 -102
  183. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn4.c +0 -91
  184. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn5.c +0 -94
  185. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn6.c +0 -92
  186. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_loc_fn0.c +0 -96
  187. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_simple.c +0 -61
  188. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_12byte.c +0 -112
  189. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_16byte.c +0 -117
  190. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_18byte.c +0 -120
  191. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_19byte.c +0 -131
  192. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_1_1byte.c +0 -93
  193. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte.c +0 -109
  194. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte1.c +0 -113
  195. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_24byte.c +0 -145
  196. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_2byte.c +0 -103
  197. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3_1byte.c +0 -114
  198. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte1.c +0 -103
  199. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte2.c +0 -103
  200. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +0 -113
  201. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4_1byte.c +0 -120
  202. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4byte.c +0 -103
  203. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5_1_byte.c +0 -137
  204. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5byte.c +0 -116
  205. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_64byte.c +0 -148
  206. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6_1_byte.c +0 -140
  207. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6byte.c +0 -121
  208. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7_1_byte.c +0 -155
  209. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7byte.c +0 -121
  210. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_8byte.c +0 -102
  211. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte1.c +0 -103
  212. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte2.c +0 -103
  213. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_double.c +0 -111
  214. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_float.c +0 -109
  215. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble.c +0 -111
  216. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split.c +0 -147
  217. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c +0 -152
  218. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_pointer.c +0 -113
  219. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint16.c +0 -108
  220. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint32.c +0 -106
  221. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint64.c +0 -109
  222. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint16.c +0 -108
  223. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint32.c +0 -109
  224. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint64.c +0 -111
  225. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_dbls_struct.c +0 -68
  226. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double.c +0 -43
  227. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double_va.c +0 -69
  228. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_float.c +0 -46
  229. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble.c +0 -115
  230. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble_va.c +0 -80
  231. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +0 -70
  232. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +0 -55
  233. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_schar.c +0 -78
  234. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshort.c +0 -79
  235. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshortchar.c +0 -94
  236. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_uchar.c +0 -99
  237. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushort.c +0 -78
  238. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushortchar.c +0 -94
  239. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer.c +0 -79
  240. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer_stack.c +0 -152
  241. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_schar.c +0 -47
  242. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sint.c +0 -44
  243. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sshort.c +0 -45
  244. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +0 -125
  245. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar.c +0 -45
  246. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint.c +0 -47
  247. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +0 -49
  248. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +0 -49
  249. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulonglong.c +0 -49
  250. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort.c +0 -46
  251. data/ext/ffi_c/libffi/testsuite/libffi.closures/err_bad_abi.c +0 -36
  252. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +0 -1
  253. data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +0 -343
  254. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct.c +0 -175
  255. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct1.c +0 -161
  256. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct10.c +0 -146
  257. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +0 -137
  258. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +0 -86
  259. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +0 -115
  260. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct2.c +0 -119
  261. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct3.c +0 -120
  262. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct4.c +0 -120
  263. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct5.c +0 -121
  264. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct6.c +0 -142
  265. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct7.c +0 -120
  266. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct8.c +0 -142
  267. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct9.c +0 -142
  268. data/ext/ffi_c/libffi/testsuite/libffi.closures/problem1.c +0 -90
  269. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +0 -86
  270. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +0 -102
  271. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +0 -101
  272. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large.c +0 -145
  273. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large2.c +0 -148
  274. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium.c +0 -124
  275. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium2.c +0 -125
  276. data/ext/ffi_c/libffi/testsuite/libffi.closures/testclosure.c +0 -75
  277. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest.cc +0 -118
  278. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc +0 -55
  279. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +0 -91
  280. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +0 -10
  281. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +0 -10
  282. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +0 -10
  283. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +0 -42
  284. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +0 -10
  285. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +0 -10
  286. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +0 -10
  287. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +0 -71
  288. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +0 -10
  289. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +0 -10
  290. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +0 -10
  291. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +0 -80
  292. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +0 -10
  293. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +0 -16
  294. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +0 -10
  295. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +0 -36
  296. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +0 -51
  297. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +0 -7
  298. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +0 -7
  299. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +0 -7
  300. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +0 -10
  301. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +0 -10
  302. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +0 -86
  303. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +0 -10
  304. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +0 -1
  305. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +0 -78
  306. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +0 -10
  307. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +0 -10
  308. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +0 -10
  309. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +0 -37
  310. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +0 -41
  311. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +0 -10
  312. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +0 -10
  313. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +0 -10
  314. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +0 -44
  315. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +0 -10
  316. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +0 -10
  317. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +0 -10
  318. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +0 -10
  319. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +0 -10
  320. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +0 -10
  321. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +0 -34
  322. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +0 -28
  323. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +0 -1
  324. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +0 -36
  325. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +0 -19
  326. data/lib/ffi/tools/types_generator.rb +0 -137
  327. data/rakelib/ffi_gem_helper.rb +0 -65
@@ -1,125 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure returning with different structure size.
3
- Depending on the ABI. Check bigger struct which overlaps
4
- the gp and fp register count on Darwin/AIX/ppc64.
5
- Limitations: none.
6
- PR: none.
7
- Originator: Blake Chaffin 6/21/2007 */
8
-
9
- /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
10
- /* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */
11
- #include "ffitest.h"
12
-
13
- typedef struct struct_72byte {
14
- double a;
15
- double b;
16
- double c;
17
- double d;
18
- double e;
19
- double f;
20
- double g;
21
- double h;
22
- long long i;
23
- } struct_72byte;
24
-
25
- static struct_72byte cls_struct_72byte_fn(
26
- struct_72byte b0,
27
- struct_72byte b1,
28
- struct_72byte b2,
29
- struct_72byte b3)
30
- {
31
- struct_72byte result;
32
-
33
- result.a = b0.a + b1.a + b2.a + b3.a;
34
- result.b = b0.b + b1.b + b2.b + b3.b;
35
- result.c = b0.c + b1.c + b2.c + b3.c;
36
- result.d = b0.d + b1.d + b2.d + b3.d;
37
- result.e = b0.e + b1.e + b2.e + b3.e;
38
- result.f = b0.f + b1.f + b2.f + b3.f;
39
- result.g = b0.g + b1.g + b2.g + b3.g;
40
- result.h = b0.h + b1.h + b2.h + b3.h;
41
- result.i = b0.i + b1.i + b2.i + b3.i;
42
-
43
- printf("%g %g %g %g %g %g %g %g %" PRIdLL "\n", result.a, result.b, result.c,
44
- result.d, result.e, result.f, result.g, result.h, result.i);
45
-
46
- return result;
47
- }
48
-
49
- static void
50
- cls_struct_72byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__)
51
- {
52
- struct_72byte b0, b1, b2, b3;
53
-
54
- b0 = *(struct_72byte*)(args[0]);
55
- b1 = *(struct_72byte*)(args[1]);
56
- b2 = *(struct_72byte*)(args[2]);
57
- b3 = *(struct_72byte*)(args[3]);
58
-
59
- *(struct_72byte*)resp = cls_struct_72byte_fn(b0, b1, b2, b3);
60
- }
61
-
62
- int main (void)
63
- {
64
- ffi_cif cif;
65
- void *code;
66
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
67
- void* args_dbl[5];
68
- ffi_type* cls_struct_fields[10];
69
- ffi_type cls_struct_type;
70
- ffi_type* dbl_arg_types[5];
71
-
72
- struct_72byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 7 };
73
- struct_72byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4 };
74
- struct_72byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 3 };
75
- struct_72byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 2 };
76
- struct_72byte res_dbl;
77
-
78
- cls_struct_type.size = 0;
79
- cls_struct_type.alignment = 0;
80
- cls_struct_type.type = FFI_TYPE_STRUCT;
81
- cls_struct_type.elements = cls_struct_fields;
82
-
83
- cls_struct_fields[0] = &ffi_type_double;
84
- cls_struct_fields[1] = &ffi_type_double;
85
- cls_struct_fields[2] = &ffi_type_double;
86
- cls_struct_fields[3] = &ffi_type_double;
87
- cls_struct_fields[4] = &ffi_type_double;
88
- cls_struct_fields[5] = &ffi_type_double;
89
- cls_struct_fields[6] = &ffi_type_double;
90
- cls_struct_fields[7] = &ffi_type_double;
91
- cls_struct_fields[8] = &ffi_type_sint64;
92
- cls_struct_fields[9] = NULL;
93
-
94
- dbl_arg_types[0] = &cls_struct_type;
95
- dbl_arg_types[1] = &cls_struct_type;
96
- dbl_arg_types[2] = &cls_struct_type;
97
- dbl_arg_types[3] = &cls_struct_type;
98
- dbl_arg_types[4] = NULL;
99
-
100
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type,
101
- dbl_arg_types) == FFI_OK);
102
-
103
- args_dbl[0] = &e_dbl;
104
- args_dbl[1] = &f_dbl;
105
- args_dbl[2] = &g_dbl;
106
- args_dbl[3] = &h_dbl;
107
- args_dbl[4] = NULL;
108
-
109
- ffi_call(&cif, FFI_FN(cls_struct_72byte_fn), &res_dbl, args_dbl);
110
- /* { dg-output "22 15 17 25 6 13 19 18 16" } */
111
- printf("res: %g %g %g %g %g %g %g %g %" PRIdLL "\n", res_dbl.a, res_dbl.b, res_dbl.c,
112
- res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i);
113
- /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */
114
-
115
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_72byte_gn, NULL, code) == FFI_OK);
116
-
117
- res_dbl = ((struct_72byte(*)(struct_72byte, struct_72byte,
118
- struct_72byte, struct_72byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl);
119
- /* { dg-output "\n22 15 17 25 6 13 19 18 16" } */
120
- printf("res: %g %g %g %g %g %g %g %g %" PRIdLL "\n", res_dbl.a, res_dbl.b, res_dbl.c,
121
- res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i);
122
- /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */
123
-
124
- exit(0);
125
- }
@@ -1,75 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value float.
3
- Limitations: none.
4
- PR: 41908.
5
- Originator: <rfm@gnu.org> 20091102 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- typedef struct cls_struct_combined {
11
- float a;
12
- float b;
13
- float c;
14
- float d;
15
- } cls_struct_combined;
16
-
17
- static void cls_struct_combined_fn(struct cls_struct_combined arg)
18
- {
19
- printf("%g %g %g %g\n",
20
- arg.a, arg.b,
21
- arg.c, arg.d);
22
- fflush(stdout);
23
-
24
- CHECK_FLOAT_EQ(arg.a, 4);
25
- CHECK_FLOAT_EQ(arg.b, 5);
26
- CHECK_FLOAT_EQ(arg.c, 1);
27
- CHECK_FLOAT_EQ(arg.d, 8);
28
- }
29
-
30
- static void
31
- cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
32
- void** args, void* userdata __UNUSED__)
33
- {
34
- struct cls_struct_combined a0;
35
-
36
- a0 = *(struct cls_struct_combined*)(args[0]);
37
-
38
- cls_struct_combined_fn(a0);
39
- }
40
-
41
-
42
- int main (void)
43
- {
44
- ffi_cif cif;
45
- void *code;
46
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
47
- ffi_type* cls_struct_fields0[5];
48
- ffi_type cls_struct_type0;
49
- ffi_type* dbl_arg_types[5];
50
-
51
- struct cls_struct_combined g_dbl = {4.0, 5.0, 1.0, 8.0};
52
-
53
- cls_struct_type0.size = 0;
54
- cls_struct_type0.alignment = 0;
55
- cls_struct_type0.type = FFI_TYPE_STRUCT;
56
- cls_struct_type0.elements = cls_struct_fields0;
57
-
58
- cls_struct_fields0[0] = &ffi_type_float;
59
- cls_struct_fields0[1] = &ffi_type_float;
60
- cls_struct_fields0[2] = &ffi_type_float;
61
- cls_struct_fields0[3] = &ffi_type_float;
62
- cls_struct_fields0[4] = NULL;
63
-
64
- dbl_arg_types[0] = &cls_struct_type0;
65
- dbl_arg_types[1] = NULL;
66
-
67
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_void,
68
- dbl_arg_types) == FFI_OK);
69
-
70
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK);
71
-
72
- ((void(*)(cls_struct_combined)) (code))(g_dbl);
73
- /* { dg-output "4 5 1 8" } */
74
- exit(0);
75
- }
@@ -1,118 +0,0 @@
1
- /* Area: ffi_closure, unwind info
2
- Purpose: Check if the unwind information is passed correctly.
3
- Limitations: none.
4
- PR: none.
5
- Originator: Jeff Sturm <jsturm@one-point.com> */
6
-
7
- /* { dg-do run { xfail moxie*-*-* } } */
8
-
9
- #include "ffitest.h"
10
-
11
- void ABI_ATTR
12
- closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
13
- void** args __UNUSED__, void* userdata __UNUSED__)
14
- {
15
- throw 9;
16
- }
17
-
18
- typedef void (*closure_test_type)();
19
-
20
- void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp,
21
- void** args, void* userdata __UNUSED__)
22
- {
23
- *(ffi_arg*)resp =
24
- (int)*(float *)args[0] +(int)(*(float *)args[1]) +
25
- (int)(*(float *)args[2]) + (int)*(float *)args[3] +
26
- (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) +
27
- (int)*(float *)args[6] + (int)(*(int *)args[7]) +
28
- (int)(*(double*)args[8]) + (int)*(int *)args[9] +
29
- (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
30
- (int)*(int *)args[12] + (int)(*(int *)args[13]) +
31
- (int)(*(int *)args[14]) + *(int *)args[15] + (int)(intptr_t)userdata;
32
-
33
- printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
34
- (int)*(float *)args[0], (int)(*(float *)args[1]),
35
- (int)(*(float *)args[2]), (int)*(float *)args[3],
36
- (int)(*(signed short *)args[4]), (int)(*(float *)args[5]),
37
- (int)*(float *)args[6], (int)(*(int *)args[7]),
38
- (int)(*(double *)args[8]), (int)*(int *)args[9],
39
- (int)(*(int *)args[10]), (int)(*(float *)args[11]),
40
- (int)*(int *)args[12], (int)(*(int *)args[13]),
41
- (int)(*(int *)args[14]), *(int *)args[15],
42
- (int)(intptr_t)userdata, (int)*(ffi_arg*)resp);
43
-
44
- throw (int)*(ffi_arg*)resp;
45
- }
46
-
47
- typedef int (*closure_test_type1)(float, float, float, float, signed short,
48
- float, float, int, double, int, int, float,
49
- int, int, int, int);
50
-
51
- extern "C"
52
- int main (void)
53
- {
54
- ffi_cif cif;
55
- void *code;
56
- ffi_closure *pcl = (ffi_closure *)ffi_closure_alloc(sizeof(ffi_closure), &code);
57
- ffi_type * cl_arg_types[17];
58
-
59
- {
60
- cl_arg_types[1] = NULL;
61
-
62
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0,
63
- &ffi_type_void, cl_arg_types) == FFI_OK);
64
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn, NULL, code) == FFI_OK);
65
-
66
- try
67
- {
68
- (*((closure_test_type)(code)))();
69
- } catch (int exception_code)
70
- {
71
- CHECK(exception_code == 9);
72
- }
73
-
74
- printf("part one OK\n");
75
- /* { dg-output "part one OK" } */
76
- }
77
-
78
- {
79
-
80
- cl_arg_types[0] = &ffi_type_float;
81
- cl_arg_types[1] = &ffi_type_float;
82
- cl_arg_types[2] = &ffi_type_float;
83
- cl_arg_types[3] = &ffi_type_float;
84
- cl_arg_types[4] = &ffi_type_sshort;
85
- cl_arg_types[5] = &ffi_type_float;
86
- cl_arg_types[6] = &ffi_type_float;
87
- cl_arg_types[7] = &ffi_type_uint;
88
- cl_arg_types[8] = &ffi_type_double;
89
- cl_arg_types[9] = &ffi_type_uint;
90
- cl_arg_types[10] = &ffi_type_uint;
91
- cl_arg_types[11] = &ffi_type_float;
92
- cl_arg_types[12] = &ffi_type_uint;
93
- cl_arg_types[13] = &ffi_type_uint;
94
- cl_arg_types[14] = &ffi_type_uint;
95
- cl_arg_types[15] = &ffi_type_uint;
96
- cl_arg_types[16] = NULL;
97
-
98
- /* Initialize the cif */
99
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
100
- &ffi_type_sint, cl_arg_types) == FFI_OK);
101
-
102
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1,
103
- (void *) 3 /* userdata */, code) == FFI_OK);
104
- try
105
- {
106
- (*((closure_test_type1)code))
107
- (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
108
- 19, 21, 1);
109
- /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
110
- } catch (int exception_code)
111
- {
112
- CHECK(exception_code == 255);
113
- }
114
- printf("part two OK\n");
115
- /* { dg-output "\npart two OK" } */
116
- }
117
- exit(0);
118
- }
@@ -1,55 +0,0 @@
1
- /* Area: ffi_call, unwind info
2
- Purpose: Check if the unwind information is passed correctly.
3
- Limitations: none.
4
- PR: none.
5
- Originator: Andreas Tobler <andreast@gcc.gnu.org> 20061213 */
6
-
7
- /* { dg-do run { xfail moxie*-*-* } } */
8
-
9
- #include "ffitest.h"
10
-
11
- static int checking(int a __UNUSED__, short b __UNUSED__,
12
- signed char c __UNUSED__)
13
- {
14
- throw 9;
15
- }
16
-
17
- extern "C"
18
- int main (void)
19
- {
20
- ffi_cif cif;
21
- ffi_type *args[MAX_ARGS];
22
- void *values[MAX_ARGS];
23
- ffi_arg rint;
24
-
25
- signed int si;
26
- signed short ss;
27
- signed char sc;
28
-
29
- args[0] = &ffi_type_sint;
30
- values[0] = &si;
31
- args[1] = &ffi_type_sshort;
32
- values[1] = &ss;
33
- args[2] = &ffi_type_schar;
34
- values[2] = &sc;
35
-
36
- /* Initialize the cif */
37
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
38
- &ffi_type_sint, args) == FFI_OK);
39
-
40
- si = -6;
41
- ss = -12;
42
- sc = -1;
43
- {
44
- try
45
- {
46
- ffi_call(&cif, FFI_FN(checking), &rint, values);
47
- } catch (int exception_code)
48
- {
49
- CHECK(exception_code == 9);
50
- }
51
- printf("part one OK\n");
52
- /* { dg-output "part one OK" } */
53
- }
54
- exit(0);
55
- }
@@ -1,91 +0,0 @@
1
- /* -*-c-*- */
2
- #include "ffitest.h"
3
- #include <complex.h>
4
-
5
- typedef struct cls_struct_align {
6
- unsigned char a;
7
- _Complex T_C_TYPE b;
8
- unsigned char c;
9
- } cls_struct_align;
10
-
11
- cls_struct_align cls_struct_align_fn(
12
- struct cls_struct_align a1, struct cls_struct_align a2)
13
- {
14
- struct cls_struct_align result;
15
-
16
- result.a = a1.a + a2.a;
17
- result.b = a1.b + a2.b;
18
- result.c = a1.c + a2.c;
19
-
20
- printf("%d %f,%fi %d %d %f,%fi %d: %d %f,%fi %d\n",
21
- a1.a, T_CONV creal (a1.b), T_CONV cimag (a1.b), a1.c,
22
- a2.a, T_CONV creal (a2.b), T_CONV cimag (a2.b), a2.c,
23
- result.a, T_CONV creal (result.b), T_CONV cimag (result.b), result.c);
24
-
25
- return result;
26
- }
27
-
28
- static void
29
- cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
30
- void* userdata __UNUSED__)
31
- {
32
-
33
- struct cls_struct_align a1, a2;
34
-
35
- a1 = *(struct cls_struct_align*)(args[0]);
36
- a2 = *(struct cls_struct_align*)(args[1]);
37
-
38
- *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2);
39
- }
40
-
41
- int main (void)
42
- {
43
- ffi_cif cif;
44
- void *code;
45
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
46
- void* args_c[5];
47
- ffi_type* cls_struct_fields[4];
48
- ffi_type cls_struct_type;
49
- ffi_type* c_arg_types[5];
50
-
51
- struct cls_struct_align g_c = { 12, 4951 + 7 * I, 127 };
52
- struct cls_struct_align f_c = { 1, 9320 + 1 * I, 13 };
53
- struct cls_struct_align res_c;
54
-
55
- cls_struct_type.size = 0;
56
- cls_struct_type.alignment = 0;
57
- cls_struct_type.type = FFI_TYPE_STRUCT;
58
- cls_struct_type.elements = cls_struct_fields;
59
-
60
- cls_struct_fields[0] = &ffi_type_uchar;
61
- cls_struct_fields[1] = &T_FFI_TYPE;
62
- cls_struct_fields[2] = &ffi_type_uchar;
63
- cls_struct_fields[3] = NULL;
64
-
65
- c_arg_types[0] = &cls_struct_type;
66
- c_arg_types[1] = &cls_struct_type;
67
- c_arg_types[2] = NULL;
68
-
69
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
70
- c_arg_types) == FFI_OK);
71
-
72
- args_c[0] = &g_c;
73
- args_c[1] = &f_c;
74
- args_c[2] = NULL;
75
-
76
- ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_c, args_c);
77
- /* { dg-output "12 4951,7i 127 1 9320,1i 13: 13 14271,8i 140" } */
78
- printf("res: %d %f,%fi %d\n",
79
- res_c.a, T_CONV creal (res_c.b), T_CONV cimag (res_c.b), res_c.c);
80
- /* { dg-output "\nres: 13 14271,8i 140" } */
81
-
82
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK);
83
-
84
- res_c = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_c, f_c);
85
- /* { dg-output "\n12 4951,7i 127 1 9320,1i 13: 13 14271,8i 140" } */
86
- printf("res: %d %f,%fi %d\n",
87
- res_c.a, T_CONV creal (res_c.b), T_CONV cimag (res_c.b), res_c.c);
88
- /* { dg-output "\nres: 13 14271,8i 140" } */
89
-
90
- exit(0);
91
- }
@@ -1,10 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure alignment of complex.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "complex_defs_double.inc"
10
- #include "cls_align_complex.inc"
@@ -1,10 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure alignment of complex.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "complex_defs_float.inc"
10
- #include "cls_align_complex.inc"
@@ -1,10 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure alignment of complex.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "complex_defs_longdouble.inc"
10
- #include "cls_align_complex.inc"
@@ -1,42 +0,0 @@
1
- /* -*-c-*- */
2
- #include "ffitest.h"
3
- #include <complex.h>
4
-
5
- static void cls_ret_complex_fn(ffi_cif* cif __UNUSED__, void* resp, void** args,
6
- void* userdata __UNUSED__)
7
- {
8
- _Complex T_C_TYPE *pa;
9
- _Complex T_C_TYPE *pr;
10
- pa = (_Complex T_C_TYPE *)args[0];
11
- pr = (_Complex T_C_TYPE *)resp;
12
- *pr = *pa;
13
-
14
- printf("%.6f,%.6fi: %.6f,%.6fi\n",
15
- T_CONV creal (*pa), T_CONV cimag (*pa),
16
- T_CONV creal (*pr), T_CONV cimag (*pr));
17
- }
18
- typedef _Complex T_C_TYPE (*cls_ret_complex)(_Complex T_C_TYPE);
19
-
20
- int main (void)
21
- {
22
- ffi_cif cif;
23
- void *code;
24
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
25
- ffi_type * cl_arg_types[2];
26
- _Complex T_C_TYPE res;
27
-
28
- cl_arg_types[0] = &T_FFI_TYPE;
29
- cl_arg_types[1] = NULL;
30
-
31
- /* Initialize the cif */
32
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
33
- &T_FFI_TYPE, cl_arg_types) == FFI_OK);
34
-
35
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_complex_fn, NULL, code) == FFI_OK);
36
-
37
- res = (*((cls_ret_complex)code))(0.125 + 128.0 * I);
38
- printf("res: %.6f,%.6fi\n", T_CONV creal (res), T_CONV cimag (res));
39
- CHECK (res == (0.125 + 128.0 * I));
40
-
41
- exit(0);
42
- }
@@ -1,10 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value complex.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "complex_defs_double.inc"
10
- #include "cls_complex.inc"
@@ -1,10 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value complex.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "complex_defs_float.inc"
10
- #include "cls_complex.inc"
@@ -1,10 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check return value complex.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "complex_defs_longdouble.inc"
10
- #include "cls_complex.inc"
@@ -1,71 +0,0 @@
1
- /* -*-c-*- */
2
- #include "ffitest.h"
3
- #include <complex.h>
4
-
5
- typedef struct Cs {
6
- _Complex T_C_TYPE x;
7
- _Complex T_C_TYPE y;
8
- } Cs;
9
-
10
- Cs gc;
11
-
12
- void
13
- closure_test_fn(Cs p)
14
- {
15
- printf("%.1f,%.1fi %.1f,%.1fi\n",
16
- T_CONV creal (p.x), T_CONV cimag (p.x),
17
- T_CONV creal (p.y), T_CONV cimag (p.y));
18
- gc = p;
19
- }
20
-
21
- void
22
- closure_test_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__,
23
- void** args, void* userdata __UNUSED__)
24
- {
25
- closure_test_fn(*(Cs*)args[0]);
26
- }
27
-
28
- int main(int argc __UNUSED__, char** argv __UNUSED__)
29
- {
30
- ffi_cif cif;
31
-
32
- void *code;
33
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
34
- ffi_type *cl_arg_types[1];
35
-
36
- ffi_type ts1_type;
37
- ffi_type* ts1_type_elements[4];
38
-
39
- Cs arg = { 1.0 + 11.0 * I, 2.0 + 22.0 * I};
40
-
41
- ts1_type.size = 0;
42
- ts1_type.alignment = 0;
43
- ts1_type.type = FFI_TYPE_STRUCT;
44
- ts1_type.elements = ts1_type_elements;
45
-
46
- ts1_type_elements[0] = &T_FFI_TYPE;
47
- ts1_type_elements[1] = &T_FFI_TYPE;
48
- ts1_type_elements[2] = NULL;
49
-
50
- cl_arg_types[0] = &ts1_type;
51
-
52
- /* Initialize the cif */
53
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
54
- &ffi_type_void, cl_arg_types) == FFI_OK);
55
-
56
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_gn, NULL, code) == FFI_OK);
57
-
58
- gc.x = 0.0 + 0.0 * I;
59
- gc.y = 0.0 + 0.0 * I;
60
- ((void*(*)(Cs))(code))(arg);
61
- /* { dg-output "1.0,11.0i 2.0,22.0i\n" } */
62
- CHECK (gc.x == arg.x && gc.y == arg.y);
63
-
64
- gc.x = 0.0 + 0.0 * I;
65
- gc.y = 0.0 + 0.0 * I;
66
- closure_test_fn(arg);
67
- /* { dg-output "1.0,11.0i 2.0,22.0i\n" } */
68
- CHECK (gc.x == arg.x && gc.y == arg.y);
69
-
70
- return 0;
71
- }
@@ -1,10 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check complex arguments in structs.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "complex_defs_double.inc"
10
- #include "cls_complex_struct.inc"
@@ -1,10 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check complex arguments in structs.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "complex_defs_float.inc"
10
- #include "cls_complex_struct.inc"
@@ -1,10 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check complex arguments in structs.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "complex_defs_longdouble.inc"
10
- #include "cls_complex_struct.inc"