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,134 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Test passing struct in variable argument lists.
3
- Limitations: none.
4
- PR: none.
5
- Originator: ARM Ltd. */
6
-
7
- /* { dg-do run } */
8
- /* { dg-output "" { xfail avr32*-*-* } } */
9
-
10
- #include "ffitest.h"
11
- #include <stdarg.h>
12
-
13
- struct small_tag
14
- {
15
- unsigned char a;
16
- unsigned char b;
17
- };
18
-
19
- struct large_tag
20
- {
21
- unsigned a;
22
- unsigned b;
23
- unsigned c;
24
- unsigned d;
25
- unsigned e;
26
- };
27
-
28
- static int
29
- test_fn (int n, ...)
30
- {
31
- va_list ap;
32
- struct small_tag s1;
33
- struct small_tag s2;
34
- struct large_tag l;
35
-
36
- va_start (ap, n);
37
- s1 = va_arg (ap, struct small_tag);
38
- l = va_arg (ap, struct large_tag);
39
- s2 = va_arg (ap, struct small_tag);
40
- printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e,
41
- s2.a, s2.b);
42
- va_end (ap);
43
-
44
- CHECK(s1.a == 5);
45
- CHECK(s1.b == 6);
46
-
47
- CHECK(l.a == 10);
48
- CHECK(l.b == 11);
49
- CHECK(l.c == 12);
50
- CHECK(l.d == 13);
51
- CHECK(l.e == 14);
52
-
53
- CHECK(s2.a == 7);
54
- CHECK(s2.b == 8);
55
- return n + 1;
56
- }
57
-
58
- int
59
- main (void)
60
- {
61
- ffi_cif cif;
62
- void* args[5];
63
- ffi_type* arg_types[5];
64
-
65
- ffi_type s_type;
66
- ffi_type *s_type_elements[3];
67
-
68
- ffi_type l_type;
69
- ffi_type *l_type_elements[6];
70
-
71
- struct small_tag s1;
72
- struct small_tag s2;
73
- struct large_tag l1;
74
-
75
- int n;
76
- ffi_arg res;
77
-
78
- s_type.size = 0;
79
- s_type.alignment = 0;
80
- s_type.type = FFI_TYPE_STRUCT;
81
- s_type.elements = s_type_elements;
82
-
83
- s_type_elements[0] = &ffi_type_uchar;
84
- s_type_elements[1] = &ffi_type_uchar;
85
- s_type_elements[2] = NULL;
86
-
87
- l_type.size = 0;
88
- l_type.alignment = 0;
89
- l_type.type = FFI_TYPE_STRUCT;
90
- l_type.elements = l_type_elements;
91
-
92
- l_type_elements[0] = &ffi_type_uint;
93
- l_type_elements[1] = &ffi_type_uint;
94
- l_type_elements[2] = &ffi_type_uint;
95
- l_type_elements[3] = &ffi_type_uint;
96
- l_type_elements[4] = &ffi_type_uint;
97
- l_type_elements[5] = NULL;
98
-
99
- arg_types[0] = &ffi_type_sint;
100
- arg_types[1] = &s_type;
101
- arg_types[2] = &l_type;
102
- arg_types[3] = &s_type;
103
- arg_types[4] = NULL;
104
-
105
- CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &ffi_type_sint, arg_types) == FFI_OK);
106
-
107
- s1.a = 5;
108
- s1.b = 6;
109
-
110
- l1.a = 10;
111
- l1.b = 11;
112
- l1.c = 12;
113
- l1.d = 13;
114
- l1.e = 14;
115
-
116
- s2.a = 7;
117
- s2.b = 8;
118
-
119
- n = 41;
120
-
121
- args[0] = &n;
122
- args[1] = &s1;
123
- args[2] = &l1;
124
- args[3] = &s2;
125
- args[4] = NULL;
126
-
127
- ffi_call(&cif, FFI_FN(test_fn), &res, args);
128
- /* { dg-output "5 6 10 11 12 13 14 7 8" } */
129
- printf("res: %d\n", (int) res);
130
- /* { dg-output "\nres: 42" } */
131
- CHECK(res == 42);
132
-
133
- return 0;
134
- }
@@ -1,135 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Test passing struct in variable argument lists.
3
- Limitations: none.
4
- PR: none.
5
- Originator: ARM Ltd. */
6
-
7
- /* { dg-do run } */
8
- /* { dg-output "" { xfail avr32*-*-* } } */
9
-
10
- #include "ffitest.h"
11
- #include <stdarg.h>
12
-
13
- struct small_tag
14
- {
15
- unsigned char a;
16
- unsigned char b;
17
- };
18
-
19
- struct large_tag
20
- {
21
- unsigned a;
22
- unsigned b;
23
- unsigned c;
24
- unsigned d;
25
- unsigned e;
26
- };
27
-
28
- static struct small_tag
29
- test_fn (int n, ...)
30
- {
31
- va_list ap;
32
- struct small_tag s1;
33
- struct small_tag s2;
34
- struct large_tag l;
35
-
36
- (void) n;
37
- va_start (ap, n);
38
- s1 = va_arg (ap, struct small_tag);
39
- l = va_arg (ap, struct large_tag);
40
- s2 = va_arg (ap, struct small_tag);
41
- printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e,
42
- s2.a, s2.b);
43
- CHECK(s1.a == 5);
44
- CHECK(s1.b == 6);
45
- CHECK(l.a == 10);
46
- CHECK(l.b == 11);
47
- CHECK(l.c == 12);
48
- CHECK(l.d == 13);
49
- CHECK(l.e == 14);
50
- CHECK(s2.a == 7);
51
- CHECK(s2.b == 8);
52
- va_end (ap);
53
- s1.a += s2.a;
54
- s1.b += s2.b;
55
- return s1;
56
- }
57
-
58
- int
59
- main (void)
60
- {
61
- ffi_cif cif;
62
- void* args[5];
63
- ffi_type* arg_types[5];
64
-
65
- ffi_type s_type;
66
- ffi_type *s_type_elements[3];
67
-
68
- ffi_type l_type;
69
- ffi_type *l_type_elements[6];
70
-
71
- struct small_tag s1;
72
- struct small_tag s2;
73
- struct large_tag l1;
74
-
75
- int n;
76
- struct small_tag res;
77
-
78
- s_type.size = 0;
79
- s_type.alignment = 0;
80
- s_type.type = FFI_TYPE_STRUCT;
81
- s_type.elements = s_type_elements;
82
-
83
- s_type_elements[0] = &ffi_type_uchar;
84
- s_type_elements[1] = &ffi_type_uchar;
85
- s_type_elements[2] = NULL;
86
-
87
- l_type.size = 0;
88
- l_type.alignment = 0;
89
- l_type.type = FFI_TYPE_STRUCT;
90
- l_type.elements = l_type_elements;
91
-
92
- l_type_elements[0] = &ffi_type_uint;
93
- l_type_elements[1] = &ffi_type_uint;
94
- l_type_elements[2] = &ffi_type_uint;
95
- l_type_elements[3] = &ffi_type_uint;
96
- l_type_elements[4] = &ffi_type_uint;
97
- l_type_elements[5] = NULL;
98
-
99
- arg_types[0] = &ffi_type_sint;
100
- arg_types[1] = &s_type;
101
- arg_types[2] = &l_type;
102
- arg_types[3] = &s_type;
103
- arg_types[4] = NULL;
104
-
105
- CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &s_type, arg_types) == FFI_OK);
106
-
107
- s1.a = 5;
108
- s1.b = 6;
109
-
110
- l1.a = 10;
111
- l1.b = 11;
112
- l1.c = 12;
113
- l1.d = 13;
114
- l1.e = 14;
115
-
116
- s2.a = 7;
117
- s2.b = 8;
118
-
119
- n = 41;
120
-
121
- args[0] = &n;
122
- args[1] = &s1;
123
- args[2] = &l1;
124
- args[3] = &s2;
125
- args[4] = NULL;
126
-
127
- ffi_call(&cif, FFI_FN(test_fn), &res, args);
128
- /* { dg-output "5 6 10 11 12 13 14 7 8" } */
129
- printf("res: %d %d\n", res.a, res.b);
130
- /* { dg-output "\nres: 12 14" } */
131
- CHECK(res.a == 12);
132
- CHECK(res.b == 14);
133
-
134
- return 0;
135
- }
@@ -1,141 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Test passing struct in variable argument lists.
3
- Limitations: none.
4
- PR: none.
5
- Originator: ARM Ltd. */
6
-
7
- /* { dg-do run } */
8
- /* { dg-output "" { xfail avr32*-*-* } } */
9
-
10
- #include "ffitest.h"
11
- #include <stdarg.h>
12
-
13
- struct small_tag
14
- {
15
- unsigned char a;
16
- unsigned char b;
17
- };
18
-
19
- struct large_tag
20
- {
21
- unsigned a;
22
- unsigned b;
23
- unsigned c;
24
- unsigned d;
25
- unsigned e;
26
- };
27
-
28
- static struct large_tag
29
- test_fn (int n, ...)
30
- {
31
- va_list ap;
32
- struct small_tag s1;
33
- struct small_tag s2;
34
- struct large_tag l;
35
-
36
- (void) n;
37
- va_start (ap, n);
38
- s1 = va_arg (ap, struct small_tag);
39
- l = va_arg (ap, struct large_tag);
40
- s2 = va_arg (ap, struct small_tag);
41
- printf ("%u %u %u %u %u %u %u %u %u\n", s1.a, s1.b, l.a, l.b, l.c, l.d, l.e,
42
- s2.a, s2.b);
43
-
44
- CHECK(s1.a == 5);
45
- CHECK(s1.b == 6);
46
- CHECK(l.a == 10);
47
- CHECK(l.b == 11);
48
- CHECK(l.c == 12);
49
- CHECK(l.d == 13);
50
- CHECK(l.e == 14);
51
- CHECK(s2.a == 7);
52
- CHECK(s2.b == 8);
53
- va_end (ap);
54
- l.a += s1.a;
55
- l.b += s1.b;
56
- l.c += s2.a;
57
- l.d += s2.b;
58
- return l;
59
- }
60
-
61
- int
62
- main (void)
63
- {
64
- ffi_cif cif;
65
- void* args[5];
66
- ffi_type* arg_types[5];
67
-
68
- ffi_type s_type;
69
- ffi_type *s_type_elements[3];
70
-
71
- ffi_type l_type;
72
- ffi_type *l_type_elements[6];
73
-
74
- struct small_tag s1;
75
- struct small_tag s2;
76
- struct large_tag l1;
77
-
78
- int n;
79
- struct large_tag res;
80
-
81
- s_type.size = 0;
82
- s_type.alignment = 0;
83
- s_type.type = FFI_TYPE_STRUCT;
84
- s_type.elements = s_type_elements;
85
-
86
- s_type_elements[0] = &ffi_type_uchar;
87
- s_type_elements[1] = &ffi_type_uchar;
88
- s_type_elements[2] = NULL;
89
-
90
- l_type.size = 0;
91
- l_type.alignment = 0;
92
- l_type.type = FFI_TYPE_STRUCT;
93
- l_type.elements = l_type_elements;
94
-
95
- l_type_elements[0] = &ffi_type_uint;
96
- l_type_elements[1] = &ffi_type_uint;
97
- l_type_elements[2] = &ffi_type_uint;
98
- l_type_elements[3] = &ffi_type_uint;
99
- l_type_elements[4] = &ffi_type_uint;
100
- l_type_elements[5] = NULL;
101
-
102
- arg_types[0] = &ffi_type_sint;
103
- arg_types[1] = &s_type;
104
- arg_types[2] = &l_type;
105
- arg_types[3] = &s_type;
106
- arg_types[4] = NULL;
107
-
108
- CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 4, &l_type, arg_types) == FFI_OK);
109
-
110
- s1.a = 5;
111
- s1.b = 6;
112
-
113
- l1.a = 10;
114
- l1.b = 11;
115
- l1.c = 12;
116
- l1.d = 13;
117
- l1.e = 14;
118
-
119
- s2.a = 7;
120
- s2.b = 8;
121
-
122
- n = 41;
123
-
124
- args[0] = &n;
125
- args[1] = &s1;
126
- args[2] = &l1;
127
- args[3] = &s2;
128
- args[4] = NULL;
129
-
130
- ffi_call(&cif, FFI_FN(test_fn), &res, args);
131
- /* { dg-output "5 6 10 11 12 13 14 7 8" } */
132
- printf("res: %d %d %d %d %d\n", res.a, res.b, res.c, res.d, res.e);
133
- /* { dg-output "\nres: 15 17 19 21 14" } */
134
- CHECK(res.a == 15);
135
- CHECK(res.b == 17);
136
- CHECK(res.c == 19);
137
- CHECK(res.d == 21);
138
- CHECK(res.e == 14);
139
-
140
- return 0;
141
- }
@@ -1,31 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check zero-extension of pointers on x32.
3
- Limitations: none.
4
- PR: 887
5
- Originator: Mikulas Patocka <mikulas@twibright.com> */
6
-
7
- /* { dg-do run } */
8
-
9
- #include "ffitest.h"
10
-
11
- static int ABI_ATTR fn(int *a)
12
- {
13
- if (a)
14
- return *a;
15
- return -1;
16
- }
17
-
18
- int main(void)
19
- {
20
- ffi_cif cif;
21
- ffi_type *args[MAX_ARGS];
22
- void *values[MAX_ARGS];
23
- void *z[2] = { (void *)0, (void *)1 };
24
- ffi_arg rint;
25
- args[0] = &ffi_type_pointer;
26
- values[0] = z;
27
- CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ffi_type_sint, args) == FFI_OK);
28
- ffi_call(&cif, FFI_FN(fn), &rint, values);
29
- CHECK((int)rint == -1);
30
- exit(0);
31
- }
@@ -1,67 +0,0 @@
1
- # Copyright (C) 2003, 2006, 2009, 2010, 2014, 2019 Free Software Foundation, Inc.
2
- # Copyright (C) 2019 Anthony Green
3
-
4
- # This program is free software; you can redistribute it and/or modify
5
- # it under the terms of the GNU General Public License as published by
6
- # the Free Software Foundation; either version 3 of the License, or
7
- # (at your option) any later version.
8
- #
9
- # This program is distributed in the hope that it will be useful,
10
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU General Public License for more details.
13
- #
14
- # You should have received a copy of the GNU General Public License
15
- # along with this program; see the file COPYING3. If not see
16
- # <http://www.gnu.org/licenses/>.
17
-
18
- dg-init
19
- libffi-init
20
-
21
- global srcdir subdir
22
-
23
- if { [string match $compiler_vendor "microsoft"] } {
24
- # -wd4005 macro redefinition
25
- # -wd4244 implicit conversion to type of smaller size
26
- # -wd4305 truncation to smaller type
27
- # -wd4477 printf %lu of uintptr_t
28
- # -wd4312 implicit conversion to type of greater size
29
- # -wd4311 pointer truncation to unsigned long
30
- # -EHsc C++ Exception Handling (no SEH exceptions)
31
- set additional_options "-wd4005 -wd4244 -wd4305 -wd4477 -wd4312 -wd4311 -EHsc";
32
- } else {
33
- set additional_options "";
34
- }
35
-
36
- set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/*.c]]
37
-
38
- if { [libffi_feature_test "#if FFI_CLOSURES"] } {
39
- run-many-tests $tlist ""
40
- } else {
41
- foreach test $tlist {
42
- unsupported "$test"
43
- }
44
- }
45
-
46
- set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/*.cc]]
47
-
48
- # No C++ for or1k
49
- if { [istarget "or1k-*-*"] } {
50
- foreach test $tlist {
51
- unsupported "$test"
52
- }
53
- } else {
54
- if { [libffi_feature_test "#if FFI_CLOSURES"] } {
55
- run-many-tests $tlist $additional_options
56
- } else {
57
- foreach test $tlist {
58
- unsupported "$test"
59
- }
60
- }
61
- }
62
-
63
- dg-finish
64
-
65
- # Local Variables:
66
- # tcl-indent-level:4
67
- # End:
@@ -1,90 +0,0 @@
1
- /* Area: closure_call
2
- Purpose: Check multiple values passing from different type.
3
- Also, exceed the limit of gpr and fpr registers on PowerPC
4
- Darwin.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20030828 */
8
-
9
-
10
-
11
-
12
- /* { dg-do run } */
13
- #include "ffitest.h"
14
-
15
- static void
16
- closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args,
17
- void* userdata)
18
- {
19
- *(ffi_arg*)resp =
20
- (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) +
21
- (int)(*(unsigned long long *)args[2]) + (int)*(int *)args[3] +
22
- (int)(*(signed short *)args[4]) +
23
- (int)(*(unsigned long long *)args[5]) +
24
- (int)*(int *)args[6] + (int)(*(int *)args[7]) +
25
- (int)(*(double *)args[8]) + (int)*(int *)args[9] +
26
- (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
27
- (int)*(int *)args[12] + (int)(*(int *)args[13]) +
28
- (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata;
29
-
30
- printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
31
- (int)*(unsigned long long *)args[0], (int)(*(int *)args[1]),
32
- (int)(*(unsigned long long *)args[2]),
33
- (int)*(int *)args[3], (int)(*(signed short *)args[4]),
34
- (int)(*(unsigned long long *)args[5]),
35
- (int)*(int *)args[6], (int)(*(int *)args[7]),
36
- (int)(*(double *)args[8]), (int)*(int *)args[9],
37
- (int)(*(int *)args[10]), (int)(*(float *)args[11]),
38
- (int)*(int *)args[12], (int)(*(int *)args[13]),
39
- (int)(*(int *)args[14]),*(int *)args[15],
40
- (int)(intptr_t)userdata, (int)*(ffi_arg *)resp);
41
- CHECK((int)*(ffi_arg *)resp == 680);
42
- }
43
-
44
- typedef int (*closure_test_type0)(unsigned long long, int, unsigned long long,
45
- int, signed short, unsigned long long, int,
46
- int, double, int, int, float, int, int,
47
- int, int);
48
-
49
- int main (void)
50
- {
51
- ffi_cif cif;
52
- void * code;
53
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
54
- ffi_type * cl_arg_types[17];
55
- int res;
56
-
57
- cl_arg_types[0] = &ffi_type_uint64;
58
- cl_arg_types[1] = &ffi_type_sint;
59
- cl_arg_types[2] = &ffi_type_uint64;
60
- cl_arg_types[3] = &ffi_type_sint;
61
- cl_arg_types[4] = &ffi_type_sshort;
62
- cl_arg_types[5] = &ffi_type_uint64;
63
- cl_arg_types[6] = &ffi_type_sint;
64
- cl_arg_types[7] = &ffi_type_sint;
65
- cl_arg_types[8] = &ffi_type_double;
66
- cl_arg_types[9] = &ffi_type_sint;
67
- cl_arg_types[10] = &ffi_type_sint;
68
- cl_arg_types[11] = &ffi_type_float;
69
- cl_arg_types[12] = &ffi_type_sint;
70
- cl_arg_types[13] = &ffi_type_sint;
71
- cl_arg_types[14] = &ffi_type_sint;
72
- cl_arg_types[15] = &ffi_type_sint;
73
- cl_arg_types[16] = NULL;
74
-
75
- /* Initialize the cif */
76
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
77
- &ffi_type_sint, cl_arg_types) == FFI_OK);
78
-
79
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0,
80
- (void *) 3 /* userdata */, code) == FFI_OK);
81
-
82
- res = (*((closure_test_type0)code))
83
- (1LL, 2, 3LL, 4, 127, 429LL, 7, 8, 9.5, 10, 11, 12, 13,
84
- 19, 21, 1);
85
- /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */
86
- printf("res: %d\n",res);
87
- /* { dg-output "\nres: 680" } */
88
- CHECK(res == 680);
89
- exit(0);
90
- }
@@ -1,83 +0,0 @@
1
- /* Area: closure_call.
2
- Purpose: Check multiple values passing from different type.
3
- Also, exceed the limit of gpr and fpr registers on PowerPC
4
- Darwin.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20030828 */
8
-
9
- /* { dg-do run } */
10
- #include "ffitest.h"
11
-
12
-
13
- static void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp, void** args,
14
- void* userdata)
15
- {
16
- *(ffi_arg*)resp =
17
- (int)*(float *)args[0] +(int)(*(float *)args[1]) +
18
- (int)(*(float *)args[2]) + (int)*(float *)args[3] +
19
- (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) +
20
- (int)*(float *)args[6] + (int)(*(int *)args[7]) +
21
- (int)(*(double*)args[8]) + (int)*(int *)args[9] +
22
- (int)(*(int *)args[10]) + (int)(*(float *)args[11]) +
23
- (int)*(int *)args[12] + (int)(*(int *)args[13]) +
24
- (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata;
25
-
26
- printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
27
- (int)*(float *)args[0], (int)(*(float *)args[1]),
28
- (int)(*(float *)args[2]), (int)*(float *)args[3],
29
- (int)(*(signed short *)args[4]), (int)(*(float *)args[5]),
30
- (int)*(float *)args[6], (int)(*(int *)args[7]),
31
- (int)(*(double *)args[8]), (int)*(int *)args[9],
32
- (int)(*(int *)args[10]), (int)(*(float *)args[11]),
33
- (int)*(int *)args[12], (int)(*(int *)args[13]),
34
- (int)(*(int *)args[14]), *(int *)args[15],
35
- (int)(intptr_t)userdata, (int)*(ffi_arg *)resp);
36
- CHECK((int)*(ffi_arg *)resp == 255);
37
- }
38
-
39
- typedef int (*closure_test_type1)(float, float, float, float, signed short,
40
- float, float, int, double, int, int, float,
41
- int, int, int, int);
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 * cl_arg_types[17];
48
- int res;
49
-
50
- cl_arg_types[0] = &ffi_type_float;
51
- cl_arg_types[1] = &ffi_type_float;
52
- cl_arg_types[2] = &ffi_type_float;
53
- cl_arg_types[3] = &ffi_type_float;
54
- cl_arg_types[4] = &ffi_type_sshort;
55
- cl_arg_types[5] = &ffi_type_float;
56
- cl_arg_types[6] = &ffi_type_float;
57
- cl_arg_types[7] = &ffi_type_sint;
58
- cl_arg_types[8] = &ffi_type_double;
59
- cl_arg_types[9] = &ffi_type_sint;
60
- cl_arg_types[10] = &ffi_type_sint;
61
- cl_arg_types[11] = &ffi_type_float;
62
- cl_arg_types[12] = &ffi_type_sint;
63
- cl_arg_types[13] = &ffi_type_sint;
64
- cl_arg_types[14] = &ffi_type_sint;
65
- cl_arg_types[15] = &ffi_type_sint;
66
- cl_arg_types[16] = NULL;
67
-
68
- /* Initialize the cif */
69
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
70
- &ffi_type_sint, cl_arg_types) == FFI_OK);
71
-
72
- CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1,
73
- (void *) 3 /* userdata */, code) == FFI_OK);
74
-
75
- res = (*((closure_test_type1)code))
76
- (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13,
77
- 19, 21, 1);
78
- /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */
79
- printf("res: %d\n",res);
80
- /* { dg-output "\nres: 255" } */
81
- CHECK(res == 255);
82
- exit(0);
83
- }