ffi 1.17.0 → 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 (359) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +51 -0
  4. data/Gemfile +8 -3
  5. data/README.md +1 -0
  6. data/Rakefile +8 -5
  7. data/Steepfile +8 -0
  8. data/ext/ffi_c/DynamicLibrary.c +1 -1
  9. data/ext/ffi_c/Function.c +54 -34
  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 +20 -15
  14. data/ext/ffi_c/libffi/Makefile.in +41 -54
  15. data/ext/ffi_c/libffi/README.md +40 -4
  16. data/ext/ffi_c/libffi/acinclude.m4 +6 -0
  17. data/ext/ffi_c/libffi/config.guess +80 -22
  18. data/ext/ffi_c/libffi/config.sub +161 -80
  19. data/ext/ffi_c/libffi/configure +135 -135
  20. data/ext/ffi_c/libffi/configure.ac +28 -14
  21. data/ext/ffi_c/libffi/configure.host +6 -6
  22. data/ext/ffi_c/libffi/doc/Makefile.in +4 -0
  23. data/ext/ffi_c/libffi/doc/libffi.texi +27 -4
  24. data/ext/ffi_c/libffi/doc/version.texi +4 -4
  25. data/ext/ffi_c/libffi/fficonfig.h.in +3 -3
  26. data/ext/ffi_c/libffi/generate-darwin-source-and-headers.py +1 -28
  27. data/ext/ffi_c/libffi/include/Makefile.in +4 -0
  28. data/ext/ffi_c/libffi/include/ffi.h.in +19 -1
  29. data/ext/ffi_c/libffi/include/ffi_cfi.h +2 -0
  30. data/ext/ffi_c/libffi/include/ffi_common.h +17 -0
  31. data/ext/ffi_c/libffi/libffi.map.in +13 -1
  32. data/ext/ffi_c/libffi/libtool-version +1 -1
  33. data/ext/ffi_c/libffi/m4/asmcfi.m4 +28 -11
  34. data/ext/ffi_c/libffi/m4/ax_check_compile_flag.m4 +13 -3
  35. data/ext/ffi_c/libffi/man/Makefile.in +4 -0
  36. data/ext/ffi_c/libffi/src/aarch64/ffi.c +7 -4
  37. data/ext/ffi_c/libffi/src/aarch64/ffitarget.h +2 -2
  38. data/ext/ffi_c/libffi/src/aarch64/internal.h +63 -17
  39. data/ext/ffi_c/libffi/src/aarch64/sysv.S +22 -12
  40. data/ext/ffi_c/libffi/src/arc/arcompact.S +2 -2
  41. data/ext/ffi_c/libffi/src/arc/ffi.c +6 -2
  42. data/ext/ffi_c/libffi/src/arm/sysv.S +1 -1
  43. data/ext/ffi_c/libffi/src/closures.c +3 -3
  44. data/ext/ffi_c/libffi/src/dlmalloc.c +1 -0
  45. data/ext/ffi_c/libffi/src/mips/ffitarget.h +2 -4
  46. data/ext/ffi_c/libffi/src/mips/n32.S +4 -0
  47. data/ext/ffi_c/libffi/src/mips/o32.S +4 -0
  48. data/ext/ffi_c/libffi/src/or1k/ffi.c +2 -2
  49. data/ext/ffi_c/libffi/src/pa/linux.S +4 -0
  50. data/ext/ffi_c/libffi/src/powerpc/ffi.c +19 -0
  51. data/ext/ffi_c/libffi/src/powerpc/ffi_linux64.c +26 -19
  52. data/ext/ffi_c/libffi/src/powerpc/ffi_sysv.c +26 -16
  53. data/ext/ffi_c/libffi/src/powerpc/internal.h +10 -0
  54. data/ext/ffi_c/libffi/src/powerpc/linux64_closure.S +47 -0
  55. data/ext/ffi_c/libffi/src/powerpc/ppc_closure.S +24 -0
  56. data/ext/ffi_c/libffi/src/prep_cif.c +1 -4
  57. data/ext/ffi_c/libffi/src/riscv/ffi.c +39 -16
  58. data/ext/ffi_c/libffi/src/riscv/internal.h +7 -0
  59. data/ext/ffi_c/libffi/src/riscv/sysv.S +24 -0
  60. data/ext/ffi_c/libffi/src/s390/ffi.c +28 -1
  61. data/ext/ffi_c/libffi/src/s390/internal.h +11 -0
  62. data/ext/ffi_c/libffi/src/s390/sysv.S +38 -0
  63. data/ext/ffi_c/libffi/src/sparc/ffi.c +16 -0
  64. data/ext/ffi_c/libffi/src/tramp.c +6 -1
  65. data/ext/ffi_c/libffi/src/types.c +23 -1
  66. data/ext/ffi_c/libffi/src/{wasm32 → wasm}/ffi.c +166 -315
  67. data/ext/ffi_c/libffi/src/{wasm32 → wasm}/ffitarget.h +17 -0
  68. data/ext/ffi_c/libffi/src/x86/ffi.c +4 -1
  69. data/ext/ffi_c/libffi/src/x86/ffi64.c +4 -1
  70. data/ext/ffi_c/libffi/src/x86/ffitarget.h +0 -3
  71. data/ext/ffi_c/libffi/src/x86/sysv.S +1 -3
  72. data/ext/ffi_c/libffi/src/x86/sysv_intel.S +1 -3
  73. data/ext/ffi_c/libffi/testsuite/Makefile.in +10 -4
  74. data/ext/ffi_c/libffi.mk +5 -0
  75. data/ffi.gemspec +7 -6
  76. data/lib/ffi/autopointer.rb +6 -0
  77. data/lib/ffi/compat.rb +11 -0
  78. data/lib/ffi/ffi.rb +59 -0
  79. data/lib/ffi/function.rb +23 -0
  80. data/lib/ffi/library.rb +19 -3
  81. data/lib/ffi/struct_by_reference.rb +1 -1
  82. data/lib/ffi/version.rb +1 -1
  83. data/samples/hello_ractor.rb +9 -1
  84. data/samples/qsort_ractor.rb +9 -1
  85. data/sig/ffi/auto_pointer.rbs +1 -2
  86. data/sig/ffi/errno.rbs +8 -0
  87. data/sig/ffi/library.rbs +1 -1
  88. data/sig/ffi/platform.rbs +49 -0
  89. data/sig/ffi/struct.rbs +2 -2
  90. data/sig/ffi/struct_by_reference.rbs +1 -1
  91. data/sig/ffi.rbs +4 -1
  92. data.tar.gz.sig +0 -0
  93. metadata +25 -339
  94. metadata.gz.sig +0 -0
  95. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  96. data/ext/ffi_c/libffi/.appveyor/site.exp +0 -16
  97. data/ext/ffi_c/libffi/.appveyor/unix-noexec.exp +0 -7
  98. data/ext/ffi_c/libffi/.appveyor.yml +0 -84
  99. data/ext/ffi_c/libffi/.ci/ar-lib +0 -270
  100. data/ext/ffi_c/libffi/.ci/bfin-sim.exp +0 -58
  101. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +0 -18
  102. data/ext/ffi_c/libffi/.ci/build-in-container.sh +0 -10
  103. data/ext/ffi_c/libffi/.ci/build.sh +0 -124
  104. data/ext/ffi_c/libffi/.ci/compile +0 -351
  105. data/ext/ffi_c/libffi/.ci/install.sh +0 -78
  106. data/ext/ffi_c/libffi/.ci/m32r-sim.exp +0 -58
  107. data/ext/ffi_c/libffi/.ci/moxie-sim.exp +0 -60
  108. data/ext/ffi_c/libffi/.ci/msvs-detect +0 -1103
  109. data/ext/ffi_c/libffi/.ci/or1k-sim.exp +0 -58
  110. data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +0 -58
  111. data/ext/ffi_c/libffi/.ci/site.exp +0 -29
  112. data/ext/ffi_c/libffi/.ci/wine-sim.exp +0 -55
  113. data/ext/ffi_c/libffi/.circleci/config.yml +0 -156
  114. data/ext/ffi_c/libffi/.gitattributes +0 -4
  115. data/ext/ffi_c/libffi/.github/issue_template.md +0 -10
  116. data/ext/ffi_c/libffi/.github/workflows/build.yml +0 -479
  117. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +0 -172
  118. data/ext/ffi_c/libffi/.gitignore +0 -46
  119. data/ext/ffi_c/libffi/src/nios2/ffi.c +0 -304
  120. data/ext/ffi_c/libffi/src/nios2/ffitarget.h +0 -52
  121. data/ext/ffi_c/libffi/src/nios2/sysv.S +0 -136
  122. data/ext/ffi_c/libffi/testsuite/Makefile.am +0 -87
  123. data/ext/ffi_c/libffi/testsuite/config/default.exp +0 -1
  124. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +0 -54
  125. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +0 -63
  126. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +0 -86
  127. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +0 -48
  128. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +0 -7
  129. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +0 -51
  130. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +0 -682
  131. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +0 -283
  132. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +0 -45
  133. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +0 -28
  134. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +0 -78
  135. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +0 -50
  136. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +0 -63
  137. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +0 -1746
  138. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +0 -2885
  139. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +0 -747
  140. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +0 -46
  141. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +0 -46
  142. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +0 -41
  143. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +0 -54
  144. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +0 -99
  145. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +0 -108
  146. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +0 -114
  147. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +0 -119
  148. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +0 -26
  149. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +0 -163
  150. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +0 -59
  151. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +0 -60
  152. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +0 -61
  153. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +0 -74
  154. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +0 -62
  155. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +0 -110
  156. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +0 -59
  157. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +0 -57
  158. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +0 -70
  159. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +0 -78
  160. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -52
  161. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +0 -46
  162. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +0 -127
  163. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +0 -59
  164. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc_tc.c +0 -114
  165. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +0 -36
  166. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +0 -43
  167. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +0 -42
  168. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +0 -35
  169. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +0 -36
  170. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +0 -49
  171. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +0 -42
  172. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +0 -34
  173. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +0 -41
  174. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +0 -48
  175. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +0 -36
  176. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +0 -42
  177. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +0 -38
  178. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +0 -42
  179. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +0 -60
  180. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +0 -43
  181. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +0 -49
  182. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +0 -49
  183. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +0 -55
  184. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +0 -67
  185. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +0 -57
  186. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +0 -67
  187. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +0 -60
  188. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +0 -64
  189. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +0 -66
  190. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +0 -64
  191. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +0 -74
  192. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +0 -81
  193. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +0 -68
  194. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +0 -63
  195. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +0 -65
  196. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +0 -65
  197. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +0 -67
  198. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +0 -67
  199. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +0 -93
  200. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +0 -61
  201. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +0 -63
  202. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +0 -90
  203. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +0 -61
  204. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +0 -78
  205. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +0 -220
  206. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +0 -154
  207. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +0 -134
  208. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +0 -134
  209. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +0 -140
  210. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +0 -67
  211. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn0.c +0 -90
  212. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn1.c +0 -83
  213. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn2.c +0 -83
  214. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn3.c +0 -102
  215. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn4.c +0 -91
  216. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn5.c +0 -94
  217. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn6.c +0 -92
  218. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_loc_fn0.c +0 -96
  219. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_simple.c +0 -61
  220. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_12byte.c +0 -112
  221. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_16byte.c +0 -117
  222. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_18byte.c +0 -120
  223. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_19byte.c +0 -131
  224. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_1_1byte.c +0 -93
  225. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte.c +0 -109
  226. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte1.c +0 -113
  227. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_24byte.c +0 -145
  228. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_2byte.c +0 -103
  229. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3_1byte.c +0 -114
  230. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte1.c +0 -103
  231. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte2.c +0 -103
  232. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +0 -113
  233. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4_1byte.c +0 -120
  234. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4byte.c +0 -103
  235. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5_1_byte.c +0 -137
  236. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5byte.c +0 -116
  237. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_64byte.c +0 -148
  238. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6_1_byte.c +0 -140
  239. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6byte.c +0 -121
  240. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7_1_byte.c +0 -155
  241. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7byte.c +0 -121
  242. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_8byte.c +0 -102
  243. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte1.c +0 -103
  244. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte2.c +0 -103
  245. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_double.c +0 -111
  246. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_float.c +0 -109
  247. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble.c +0 -111
  248. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split.c +0 -147
  249. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c +0 -152
  250. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_pointer.c +0 -113
  251. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint16.c +0 -108
  252. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint32.c +0 -106
  253. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint64.c +0 -109
  254. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint16.c +0 -108
  255. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint32.c +0 -109
  256. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint64.c +0 -111
  257. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_dbls_struct.c +0 -68
  258. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double.c +0 -43
  259. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double_va.c +0 -69
  260. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_float.c +0 -46
  261. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble.c +0 -115
  262. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble_va.c +0 -80
  263. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +0 -70
  264. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +0 -55
  265. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_schar.c +0 -78
  266. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshort.c +0 -79
  267. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshortchar.c +0 -94
  268. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_uchar.c +0 -99
  269. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushort.c +0 -78
  270. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushortchar.c +0 -94
  271. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer.c +0 -79
  272. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer_stack.c +0 -152
  273. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_schar.c +0 -47
  274. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sint.c +0 -44
  275. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sshort.c +0 -45
  276. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +0 -125
  277. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar.c +0 -45
  278. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint.c +0 -47
  279. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +0 -49
  280. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +0 -49
  281. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulonglong.c +0 -49
  282. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort.c +0 -46
  283. data/ext/ffi_c/libffi/testsuite/libffi.closures/err_bad_abi.c +0 -36
  284. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +0 -1
  285. data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +0 -343
  286. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct.c +0 -175
  287. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct1.c +0 -161
  288. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct10.c +0 -146
  289. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +0 -137
  290. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +0 -86
  291. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +0 -115
  292. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct2.c +0 -119
  293. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct3.c +0 -120
  294. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct4.c +0 -120
  295. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct5.c +0 -121
  296. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct6.c +0 -142
  297. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct7.c +0 -120
  298. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct8.c +0 -142
  299. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct9.c +0 -142
  300. data/ext/ffi_c/libffi/testsuite/libffi.closures/problem1.c +0 -90
  301. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +0 -86
  302. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +0 -102
  303. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +0 -101
  304. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large.c +0 -145
  305. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large2.c +0 -148
  306. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium.c +0 -124
  307. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium2.c +0 -125
  308. data/ext/ffi_c/libffi/testsuite/libffi.closures/testclosure.c +0 -75
  309. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest.cc +0 -118
  310. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc +0 -55
  311. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +0 -91
  312. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +0 -10
  313. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +0 -10
  314. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +0 -10
  315. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +0 -42
  316. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +0 -10
  317. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +0 -10
  318. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +0 -10
  319. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +0 -71
  320. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +0 -10
  321. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +0 -10
  322. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +0 -10
  323. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +0 -80
  324. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +0 -10
  325. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +0 -16
  326. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +0 -10
  327. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +0 -36
  328. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +0 -51
  329. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +0 -7
  330. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +0 -7
  331. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +0 -7
  332. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +0 -10
  333. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +0 -10
  334. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +0 -86
  335. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +0 -10
  336. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +0 -1
  337. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +0 -78
  338. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +0 -10
  339. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +0 -10
  340. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +0 -10
  341. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +0 -37
  342. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +0 -41
  343. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +0 -10
  344. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +0 -10
  345. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +0 -10
  346. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +0 -44
  347. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +0 -10
  348. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +0 -10
  349. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +0 -10
  350. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +0 -10
  351. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +0 -10
  352. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +0 -10
  353. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +0 -34
  354. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +0 -28
  355. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +0 -1
  356. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +0 -36
  357. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +0 -19
  358. data/lib/ffi/tools/types_generator.rb +0 -137
  359. data/rakelib/ffi_gem_helper.rb +0 -65
@@ -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"
@@ -1,80 +0,0 @@
1
- /* -*-c-*- */
2
- #include "ffitest.h"
3
- #include <stdio.h>
4
- #include <stdlib.h>
5
- #include <stdarg.h>
6
- #include <complex.h>
7
-
8
- static _Complex T_C_TYPE gComplexValue1 = 1 + 2 * I;
9
- static _Complex T_C_TYPE gComplexValue2 = 3 + 4 * I;
10
-
11
- static int cls_variadic(const char *format, ...)
12
- {
13
- va_list ap;
14
- _Complex T_C_TYPE p1, p2;
15
-
16
- va_start (ap, format);
17
- p1 = va_arg (ap, _Complex T_C_TYPE);
18
- p2 = va_arg (ap, _Complex T_C_TYPE);
19
- va_end (ap);
20
-
21
- return printf(format, T_CONV creal (p1), T_CONV cimag (p1),
22
- T_CONV creal (p2), T_CONV cimag (p2));
23
- }
24
-
25
- static void
26
- cls_complex_va_fn(ffi_cif* cif __UNUSED__, void* resp,
27
- void** args, void* userdata __UNUSED__)
28
- {
29
- char* format = *(char**)args[0];
30
- gComplexValue1 = *(_Complex T_C_TYPE*)args[1];
31
- gComplexValue2 = *(_Complex T_C_TYPE*)args[2];
32
-
33
- *(ffi_arg*)resp =
34
- printf(format,
35
- T_CONV creal (gComplexValue1), T_CONV cimag (gComplexValue1),
36
- T_CONV creal (gComplexValue2), T_CONV cimag (gComplexValue2));
37
- }
38
-
39
- int main (void)
40
- {
41
- ffi_cif cif;
42
- void *code;
43
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
44
- void* args[4];
45
- ffi_type* arg_types[4];
46
- char *format = "%.1f,%.1fi %.1f,%.1fi\n";
47
-
48
- _Complex T_C_TYPE complexArg1 = 1.0 + 22.0 *I;
49
- _Complex T_C_TYPE complexArg2 = 333.0 + 4444.0 *I;
50
- ffi_arg res = 0;
51
-
52
- arg_types[0] = &ffi_type_pointer;
53
- arg_types[1] = &T_FFI_TYPE;
54
- arg_types[2] = &T_FFI_TYPE;
55
- arg_types[3] = NULL;
56
-
57
- /* This printf call is variadic */
58
- CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 3, &ffi_type_sint,
59
- arg_types) == FFI_OK);
60
-
61
- args[0] = &format;
62
- args[1] = &complexArg1;
63
- args[2] = &complexArg2;
64
- args[3] = NULL;
65
-
66
- ffi_call(&cif, FFI_FN(cls_variadic), &res, args);
67
- printf("res: %d\n", (int) res);
68
- CHECK (res == 24);
69
-
70
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_complex_va_fn, NULL, code)
71
- == FFI_OK);
72
-
73
- res = ((int(*)(char *, ...))(code))(format, complexArg1, complexArg2);
74
- CHECK (gComplexValue1 == complexArg1);
75
- CHECK (gComplexValue2 == complexArg2);
76
- printf("res: %d\n", (int) res);
77
- CHECK (res == 24);
78
-
79
- exit(0);
80
- }
@@ -1,10 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Test complex' passed in variable argument lists.
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_va.inc"
@@ -1,16 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Test complex' passed in variable argument lists.
3
- Limitations: none.
4
- PR: none.
5
- Originator: <vogt@linux.vnet.ibm.com>. */
6
-
7
- /* { dg-do run } */
8
-
9
- /* Alpha splits _Complex into two arguments. It's illegal to pass
10
- float through varargs, so _Complex float goes badly. In sort of
11
- gets passed as _Complex double, but the compiler doesn't agree
12
- with itself on this issue. */
13
- /* { dg-do run { xfail alpha*-*-* } } */
14
-
15
- #include "complex_defs_float.inc"
16
- #include "cls_complex_va.inc"
@@ -1,10 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Test complex' passed in variable argument lists.
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_va.inc"
@@ -1,36 +0,0 @@
1
- # Copyright (C) 2003, 2006, 2009, 2010, 2014 Free Software Foundation, Inc.
2
-
3
- # This program is free software; you can redistribute it and/or modify
4
- # it under the terms of the GNU General Public License as published by
5
- # the Free Software Foundation; either version 3 of the License, or
6
- # (at your option) any later version.
7
- #
8
- # This program is distributed in the hope that it will be useful,
9
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- # GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License
14
- # along with this program; see the file COPYING3. If not see
15
- # <http://www.gnu.org/licenses/>.
16
-
17
- dg-init
18
- libffi-init
19
-
20
- global srcdir subdir
21
-
22
- set tlist [lsort [glob -nocomplain -- $srcdir/$subdir/*.{c,cc}]]
23
-
24
- if { [libffi_feature_test "#ifdef FFI_TARGET_HAS_COMPLEX_TYPE"] } {
25
- run-many-tests $tlist ""
26
- } else {
27
- foreach test $tlist {
28
- unsupported "$test"
29
- }
30
- }
31
-
32
- dg-finish
33
-
34
- # Local Variables:
35
- # tcl-indent-level:4
36
- # End:
@@ -1,51 +0,0 @@
1
- /* -*-c-*-*/
2
- #include "ffitest.h"
3
- #include <complex.h>
4
-
5
- static _Complex T_C_TYPE f_complex(_Complex T_C_TYPE c, int x, int *py)
6
- {
7
- c = -(2 * creal (c)) + (cimag (c) + 1)* I;
8
- *py += x;
9
-
10
- return c;
11
- }
12
-
13
- int main (void)
14
- {
15
- ffi_cif cif;
16
- ffi_type *args[MAX_ARGS];
17
- void *values[MAX_ARGS];
18
-
19
- _Complex T_C_TYPE tc_arg;
20
- _Complex T_C_TYPE tc_result;
21
- int tc_int_arg_x;
22
- int tc_y;
23
- int *tc_ptr_arg_y = &tc_y;
24
-
25
- args[0] = &T_FFI_TYPE;
26
- args[1] = &ffi_type_sint;
27
- args[2] = &ffi_type_pointer;
28
- values[0] = &tc_arg;
29
- values[1] = &tc_int_arg_x;
30
- values[2] = &tc_ptr_arg_y;
31
-
32
- /* Initialize the cif */
33
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3,
34
- &T_FFI_TYPE, args) == FFI_OK);
35
-
36
- tc_arg = 1 + 7 * I;
37
- tc_int_arg_x = 1234;
38
- tc_y = 9876;
39
- ffi_call(&cif, FFI_FN(f_complex), &tc_result, values);
40
-
41
- printf ("%f,%fi %f,%fi, x %d 1234, y %d 11110\n",
42
- T_CONV creal (tc_result), T_CONV cimag (tc_result),
43
- T_CONV creal (2.0), T_CONV creal (8.0), tc_int_arg_x, tc_y);
44
-
45
- CHECK (creal (tc_result) == -2);
46
- CHECK (cimag (tc_result) == 8);
47
- CHECK (tc_int_arg_x == 1234);
48
- CHECK (*tc_ptr_arg_y == 11110);
49
-
50
- exit(0);
51
- }