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,42 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check return value double.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20050212 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static double return_dbl(double dbl1, double dbl2, unsigned int in3, double dbl4)
11
- {
12
- return dbl1 + dbl2 + in3 + dbl4;
13
- }
14
- int main (void)
15
- {
16
- ffi_cif cif;
17
- ffi_type *args[MAX_ARGS];
18
- void *values[MAX_ARGS];
19
- double dbl1, dbl2, dbl4, rdbl;
20
- unsigned int in3;
21
- args[0] = &ffi_type_double;
22
- args[1] = &ffi_type_double;
23
- args[2] = &ffi_type_uint;
24
- args[3] = &ffi_type_double;
25
- values[0] = &dbl1;
26
- values[1] = &dbl2;
27
- values[2] = &in3;
28
- values[3] = &dbl4;
29
-
30
- /* Initialize the cif */
31
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
32
- &ffi_type_double, args) == FFI_OK);
33
- dbl1 = 127.0;
34
- dbl2 = 128.0;
35
- in3 = 255;
36
- dbl4 = 512.7;
37
-
38
- ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values);
39
- printf ("%f vs %f\n", rdbl, return_dbl(dbl1, dbl2, in3, dbl4));
40
- CHECK(rdbl == dbl1 + dbl2 + in3 + dbl4);
41
- exit(0);
42
- }
@@ -1,35 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check return value float.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20050212 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static float return_fl(float fl)
11
- {
12
- return 2 * fl;
13
- }
14
- int main (void)
15
- {
16
- ffi_cif cif;
17
- ffi_type *args[MAX_ARGS];
18
- void *values[MAX_ARGS];
19
- float fl, rfl;
20
-
21
- args[0] = &ffi_type_float;
22
- values[0] = &fl;
23
-
24
- /* Initialize the cif */
25
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
26
- &ffi_type_float, args) == FFI_OK);
27
-
28
- for (fl = -127.0; fl < 127; fl++)
29
- {
30
- ffi_call(&cif, FFI_FN(return_fl), &rfl, values);
31
- printf ("%f vs %f\n", rfl, return_fl(fl));
32
- CHECK(rfl == 2 * fl);
33
- }
34
- exit(0);
35
- }
@@ -1,36 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check return value float.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20050212 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static float return_fl(float fl1, float fl2)
11
- {
12
- return fl1 + fl2;
13
- }
14
- int main (void)
15
- {
16
- ffi_cif cif;
17
- ffi_type *args[MAX_ARGS];
18
- void *values[MAX_ARGS];
19
- float fl1, fl2, rfl;
20
-
21
- args[0] = &ffi_type_float;
22
- args[1] = &ffi_type_float;
23
- values[0] = &fl1;
24
- values[1] = &fl2;
25
-
26
- /* Initialize the cif */
27
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
28
- &ffi_type_float, args) == FFI_OK);
29
- fl1 = 127.0;
30
- fl2 = 128.0;
31
-
32
- ffi_call(&cif, FFI_FN(return_fl), &rfl, values);
33
- printf ("%f vs %f\n", rfl, return_fl(fl1, fl2));
34
- CHECK(rfl == fl1 + fl2);
35
- exit(0);
36
- }
@@ -1,49 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check return value float.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20050212 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- /* Use volatile float to avoid false negative on ix86. See PR target/323. */
11
- static float return_fl(float fl1, float fl2, float fl3, float fl4)
12
- {
13
- volatile float sum;
14
-
15
- sum = fl1 + fl2 + fl3 + fl4;
16
- return sum;
17
- }
18
- int main (void)
19
- {
20
- ffi_cif cif;
21
- ffi_type *args[MAX_ARGS];
22
- void *values[MAX_ARGS];
23
- float fl1, fl2, fl3, fl4, rfl;
24
- volatile float sum;
25
-
26
- args[0] = &ffi_type_float;
27
- args[1] = &ffi_type_float;
28
- args[2] = &ffi_type_float;
29
- args[3] = &ffi_type_float;
30
- values[0] = &fl1;
31
- values[1] = &fl2;
32
- values[2] = &fl3;
33
- values[3] = &fl4;
34
-
35
- /* Initialize the cif */
36
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
37
- &ffi_type_float, args) == FFI_OK);
38
- fl1 = 127.0;
39
- fl2 = 128.0;
40
- fl3 = 255.1;
41
- fl4 = 512.7;
42
-
43
- ffi_call(&cif, FFI_FN(return_fl), &rfl, values);
44
- printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, fl3, fl4));
45
-
46
- sum = fl1 + fl2 + fl3 + fl4;
47
- CHECK(rfl == sum);
48
- exit(0);
49
- }
@@ -1,42 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check return value float.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20050212 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static float return_fl(float fl1, float fl2, unsigned int in3, float fl4)
11
- {
12
- return fl1 + fl2 + in3 + fl4;
13
- }
14
- int main (void)
15
- {
16
- ffi_cif cif;
17
- ffi_type *args[MAX_ARGS];
18
- void *values[MAX_ARGS];
19
- float fl1, fl2, fl4, rfl;
20
- unsigned int in3;
21
- args[0] = &ffi_type_float;
22
- args[1] = &ffi_type_float;
23
- args[2] = &ffi_type_uint;
24
- args[3] = &ffi_type_float;
25
- values[0] = &fl1;
26
- values[1] = &fl2;
27
- values[2] = &in3;
28
- values[3] = &fl4;
29
-
30
- /* Initialize the cif */
31
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
32
- &ffi_type_float, args) == FFI_OK);
33
- fl1 = 127.0;
34
- fl2 = 128.0;
35
- in3 = 255;
36
- fl4 = 512.7;
37
-
38
- ffi_call(&cif, FFI_FN(return_fl), &rfl, values);
39
- printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, in3, fl4));
40
- CHECK(rfl == fl1 + fl2 + in3 + fl4);
41
- exit(0);
42
- }
@@ -1,34 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check return value long double.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <andreast@gcc.gnu.org> 20071113 */
6
- /* { dg-do run } */
7
-
8
- #include "ffitest.h"
9
-
10
- static long double return_ldl(long double ldl)
11
- {
12
- return 2*ldl;
13
- }
14
- int main (void)
15
- {
16
- ffi_cif cif;
17
- ffi_type *args[MAX_ARGS];
18
- void *values[MAX_ARGS];
19
- long double ldl, rldl;
20
-
21
- args[0] = &ffi_type_longdouble;
22
- values[0] = &ldl;
23
-
24
- /* Initialize the cif */
25
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
26
- &ffi_type_longdouble, args) == FFI_OK);
27
-
28
- for (ldl = -127.0; ldl < 127.0; ldl++)
29
- {
30
- ffi_call(&cif, FFI_FN(return_ldl), &rldl, values);
31
- CHECK(rldl == 2 * ldl);
32
- }
33
- exit(0);
34
- }
@@ -1,41 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check return value long long.
3
- Limitations: none.
4
- PR: none.
5
- Originator: From the original ffitest.c */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
- static long long return_ll(long long ll)
10
- {
11
- return ll;
12
- }
13
-
14
- int main (void)
15
- {
16
- ffi_cif cif;
17
- ffi_type *args[MAX_ARGS];
18
- void *values[MAX_ARGS];
19
- long long rlonglong;
20
- long long ll;
21
-
22
- args[0] = &ffi_type_sint64;
23
- values[0] = &ll;
24
-
25
- /* Initialize the cif */
26
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
27
- &ffi_type_sint64, args) == FFI_OK);
28
-
29
- for (ll = 0LL; ll < 100LL; ll++)
30
- {
31
- ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
32
- CHECK(rlonglong == ll);
33
- }
34
-
35
- for (ll = 55555555555000LL; ll < 55555555555100LL; ll++)
36
- {
37
- ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
38
- CHECK(rlonglong == ll);
39
- }
40
- exit(0);
41
- }
@@ -1,48 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check if long long are passed in the corresponding regs on ppc.
3
- Limitations: none.
4
- PR: 20104.
5
- Originator: <andreast@gcc.gnu.org> 20050222 */
6
-
7
- /* { dg-do run } */
8
- /* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */
9
- #include "ffitest.h"
10
- static long long return_ll(int ll0, long long ll1, int ll2)
11
- {
12
- CHECK(ll0 == 11111111);
13
- CHECK(ll1 == 11111111111000LL);
14
- CHECK(ll2 == 11111111);
15
- return ll0 + ll1 + ll2;
16
- }
17
-
18
- int main (void)
19
- {
20
- ffi_cif cif;
21
- ffi_type *args[MAX_ARGS];
22
- void *values[MAX_ARGS];
23
- long long rlonglong;
24
- long long ll1;
25
- unsigned ll0, ll2;
26
-
27
- args[0] = &ffi_type_sint;
28
- args[1] = &ffi_type_sint64;
29
- args[2] = &ffi_type_sint;
30
- values[0] = &ll0;
31
- values[1] = &ll1;
32
- values[2] = &ll2;
33
-
34
- /* Initialize the cif */
35
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
36
- &ffi_type_sint64, args) == FFI_OK);
37
-
38
- ll0 = 11111111;
39
- ll1 = 11111111111000LL;
40
- ll2 = 11111111;
41
-
42
- ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values);
43
- printf("res: %" PRIdLL ", %" PRIdLL "\n", rlonglong, ll0 + ll1 + ll2);
44
- /* { dg-output "res: 11111133333222, 11111133333222" } */
45
- CHECK(rlonglong == 11111133333222);
46
- CHECK(ll0 + ll1 + ll2 == 11111133333222);
47
- exit(0);
48
- }
@@ -1,36 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check return value signed char.
3
- Limitations: none.
4
- PR: none.
5
- Originator: From the original ffitest.c */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static signed char return_sc(signed char sc)
11
- {
12
- return sc;
13
- }
14
- int main (void)
15
- {
16
- ffi_cif cif;
17
- ffi_type *args[MAX_ARGS];
18
- void *values[MAX_ARGS];
19
- ffi_arg rint;
20
- signed char sc;
21
-
22
- args[0] = &ffi_type_schar;
23
- values[0] = &sc;
24
-
25
- /* Initialize the cif */
26
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
27
- &ffi_type_schar, args) == FFI_OK);
28
-
29
- for (sc = (signed char) -127;
30
- sc < (signed char) 127; sc++)
31
- {
32
- ffi_call(&cif, FFI_FN(return_sc), &rint, values);
33
- CHECK((signed char)rint == sc);
34
- }
35
- exit(0);
36
- }
@@ -1,42 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check if long as return type is handled correctly.
3
- Limitations: none.
4
- PR: none.
5
- */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
- static long return_sl(long l1, long l2)
10
- {
11
- CHECK(l1 == 1073741823L);
12
- CHECK(l2 == 1073741824L);
13
- return l1 - l2;
14
- }
15
-
16
- int main (void)
17
- {
18
- ffi_cif cif;
19
- ffi_type *args[MAX_ARGS];
20
- void *values[MAX_ARGS];
21
- ffi_arg res;
22
- unsigned long l1, l2;
23
-
24
- args[0] = &ffi_type_slong;
25
- args[1] = &ffi_type_slong;
26
- values[0] = &l1;
27
- values[1] = &l2;
28
-
29
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
30
- &ffi_type_slong, args) == FFI_OK);
31
-
32
- l1 = 1073741823L;
33
- l2 = 1073741824L;
34
-
35
- ffi_call(&cif, FFI_FN(return_sl), &res, values);
36
- printf("res: %ld, %ld\n", (long)res, l1 - l2);
37
- /* { dg-output "res: -1, -1" } */
38
- CHECK((long)res == -1);
39
- CHECK(l1 + 1 == l2);
40
-
41
- exit(0);
42
- }
@@ -1,38 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check return value unsigned char.
3
- Limitations: none.
4
- PR: none.
5
- Originator: From the original ffitest.c */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static unsigned char return_uc(unsigned char uc)
11
- {
12
- return uc;
13
- }
14
-
15
- int main (void)
16
- {
17
- ffi_cif cif;
18
- ffi_type *args[MAX_ARGS];
19
- void *values[MAX_ARGS];
20
- ffi_arg rint;
21
-
22
- unsigned char uc;
23
-
24
- args[0] = &ffi_type_uchar;
25
- values[0] = &uc;
26
-
27
- /* Initialize the cif */
28
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
29
- &ffi_type_uchar, args) == FFI_OK);
30
-
31
- for (uc = (unsigned char) '\x00';
32
- uc < (unsigned char) '\xff'; uc++)
33
- {
34
- ffi_call(&cif, FFI_FN(return_uc), &rint, values);
35
- CHECK((unsigned char)rint == uc);
36
- }
37
- exit(0);
38
- }
@@ -1,42 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check if unsigned long as return type is handled correctly.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <kaffeetisch at gmx dot de> 20060724 */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
- static unsigned long return_ul(unsigned long ul1, unsigned long ul2)
10
- {
11
- CHECK(ul1 == 1073741823L);
12
- CHECK(ul2 == 1073741824L);
13
- return ul1 + ul2;
14
- }
15
-
16
- int main (void)
17
- {
18
- ffi_cif cif;
19
- ffi_type *args[MAX_ARGS];
20
- void *values[MAX_ARGS];
21
- ffi_arg res;
22
- unsigned long ul1, ul2;
23
-
24
- args[0] = &ffi_type_ulong;
25
- args[1] = &ffi_type_ulong;
26
- values[0] = &ul1;
27
- values[1] = &ul2;
28
-
29
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2,
30
- &ffi_type_ulong, args) == FFI_OK);
31
-
32
- ul1 = 1073741823L;
33
- ul2 = 1073741824L;
34
-
35
- ffi_call(&cif, FFI_FN(return_ul), &res, values);
36
- printf("res: %lu, %lu\n", (unsigned long)res, ul1 + ul2);
37
- /* { dg-output "res: 2147483647, 2147483647" } */
38
- CHECK(res == 2147483647L);
39
- CHECK(ul1 + ul2 == 2147483647L);
40
-
41
- exit(0);
42
- }
@@ -1,60 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check structures.
3
- Limitations: none.
4
- PR: none.
5
- Originator: From the original ffitest.c */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- typedef struct
11
- {
12
- float f;
13
- } s55;
14
-
15
- static s55 ABI_ATTR f55(s55 ts, float f)
16
- {
17
- s55 r;
18
- r.f = ts.f + f;
19
- printf ("f55>> %g + %g = %g\n", ts.f, f, r.f);
20
- return r;
21
- }
22
-
23
- int main (void)
24
- {
25
- ffi_cif cif;
26
- s55 F, Fr;
27
- float f;
28
- void *values[] = { &F, &f };
29
- ffi_type s55_type;
30
- ffi_type *args[] = { &s55_type, &ffi_type_float };
31
- ffi_type *s55_type_elements[] = { &ffi_type_float, NULL };
32
-
33
- /* This is a hack to get a properly aligned result buffer */
34
- s55 *s55_result =
35
- (s55 *) malloc (sizeof(s55));
36
-
37
- s55_type.size = 0;
38
- s55_type.alignment = 0;
39
- s55_type.type = FFI_TYPE_STRUCT;
40
- s55_type.elements = s55_type_elements;
41
-
42
- /* Initialize the cif */
43
- CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, &s55_type, args) == FFI_OK);
44
-
45
- F.f = 1;
46
- Fr = f55(F, 2.14);
47
- printf ("%g\n", Fr.f);
48
-
49
- F.f = 1;
50
- f = 2.14;
51
- ffi_call(&cif, FFI_FN(f55), s55_result, values);
52
- printf ("%g\n", s55_result->f);
53
-
54
- fflush(0);
55
-
56
- CHECK(fabs(Fr.f - s55_result->f) < FLT_EPSILON);
57
-
58
- free (s55_result);
59
- exit(0);
60
- }
@@ -1,43 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check strlen function call.
3
- Limitations: none.
4
- PR: none.
5
- Originator: From the original ffitest.c */
6
-
7
- /* { dg-do run } */
8
- #include "ffitest.h"
9
-
10
- static unsigned int ABI_ATTR my_strlen(char *s)
11
- {
12
- return (unsigned int) (strlen(s));
13
- }
14
-
15
- int main (void)
16
- {
17
- ffi_cif cif;
18
- ffi_type *args[MAX_ARGS];
19
- void *values[MAX_ARGS];
20
- ffi_arg rint;
21
- char *s;
22
-
23
- args[0] = &ffi_type_pointer;
24
- values[0] = (void*) &s;
25
-
26
- /* Initialize the cif */
27
- CHECK(ffi_prep_cif(&cif, ABI_NUM, 1,
28
- &ffi_type_uint, args) == FFI_OK);
29
-
30
- s = "a";
31
- ffi_call(&cif, FFI_FN(my_strlen), &rint, values);
32
- CHECK(rint == 1);
33
-
34
- s = "1234567";
35
- ffi_call(&cif, FFI_FN(my_strlen), &rint, values);
36
- CHECK(rint == 7);
37
-
38
- s = "1234567890123456789012345";
39
- ffi_call(&cif, FFI_FN(my_strlen), &rint, values);
40
- CHECK(rint == 25);
41
-
42
- exit (0);
43
- }
@@ -1,49 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check strlen function call with additional arguments.
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 ABI_ATTR my_f(char *s, float a)
12
- {
13
- return (int) strlen(s) + (int) a;
14
- }
15
-
16
- int main (void)
17
- {
18
- ffi_cif cif;
19
- ffi_type *args[MAX_ARGS];
20
- void *values[MAX_ARGS];
21
- ffi_arg rint;
22
- char *s;
23
- float v2;
24
- args[0] = &ffi_type_pointer;
25
- args[1] = &ffi_type_float;
26
- values[0] = (void*) &s;
27
- values[1] = (void*) &v2;
28
-
29
- /* Initialize the cif */
30
- CHECK(ffi_prep_cif(&cif, ABI_NUM, 2,
31
- &ffi_type_sint, args) == FFI_OK);
32
-
33
- s = "a";
34
- v2 = 0.0;
35
- ffi_call(&cif, FFI_FN(my_f), &rint, values);
36
- CHECK(rint == 1);
37
-
38
- s = "1234567";
39
- v2 = -1.0;
40
- ffi_call(&cif, FFI_FN(my_f), &rint, values);
41
- CHECK(rint == 6);
42
-
43
- s = "1234567890123456789012345";
44
- v2 = 1.0;
45
- ffi_call(&cif, FFI_FN(my_f), &rint, values);
46
- CHECK(rint == 26);
47
-
48
- exit(0);
49
- }
@@ -1,49 +0,0 @@
1
- /* Area: ffi_call
2
- Purpose: Check strlen function call with additional arguments.
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 ABI_ATTR my_f(float a, char *s)
12
- {
13
- return (int) strlen(s) + (int) a;
14
- }
15
-
16
- int main (void)
17
- {
18
- ffi_cif cif;
19
- ffi_type *args[MAX_ARGS];
20
- void *values[MAX_ARGS];
21
- ffi_arg rint;
22
- char *s;
23
- float v2;
24
- args[1] = &ffi_type_pointer;
25
- args[0] = &ffi_type_float;
26
- values[1] = (void*) &s;
27
- values[0] = (void*) &v2;
28
-
29
- /* Initialize the cif */
30
- CHECK(ffi_prep_cif(&cif, ABI_NUM, 2,
31
- &ffi_type_sint, args) == FFI_OK);
32
-
33
- s = "a";
34
- v2 = 0.0;
35
- ffi_call(&cif, FFI_FN(my_f), &rint, values);
36
- CHECK(rint == 1);
37
-
38
- s = "1234567";
39
- v2 = -1.0;
40
- ffi_call(&cif, FFI_FN(my_f), &rint, values);
41
- CHECK(rint == 6);
42
-
43
- s = "1234567890123456789012345";
44
- v2 = 1.0;
45
- ffi_call(&cif, FFI_FN(my_f), &rint, values);
46
- CHECK(rint == 26);
47
-
48
- exit(0);
49
- }