ffi 1.17.3 → 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 (277) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +10 -1
  4. data/ext/ffi_c/StructLayout.c +129 -12
  5. data/ffi.gemspec +3 -1
  6. data/lib/ffi/version.rb +1 -1
  7. data.tar.gz.sig +0 -0
  8. metadata +1 -269
  9. metadata.gz.sig +0 -0
  10. data/ext/ffi_c/libffi/.allow-ai-service +0 -0
  11. data/ext/ffi_c/libffi/.ci/Containerfile.ppc64le +0 -12
  12. data/ext/ffi_c/libffi/.ci/ar-lib +0 -270
  13. data/ext/ffi_c/libffi/.ci/bfin-sim.exp +0 -58
  14. data/ext/ffi_c/libffi/.ci/build-cross-in-container.sh +0 -18
  15. data/ext/ffi_c/libffi/.ci/build-in-container.sh +0 -10
  16. data/ext/ffi_c/libffi/.ci/build.sh +0 -129
  17. data/ext/ffi_c/libffi/.ci/compile +0 -351
  18. data/ext/ffi_c/libffi/.ci/install.sh +0 -74
  19. data/ext/ffi_c/libffi/.ci/m32r-sim.exp +0 -58
  20. data/ext/ffi_c/libffi/.ci/moxie-sim.exp +0 -60
  21. data/ext/ffi_c/libffi/.ci/msvs-detect +0 -1103
  22. data/ext/ffi_c/libffi/.ci/or1k-sim.exp +0 -58
  23. data/ext/ffi_c/libffi/.ci/powerpc-eabisim.exp +0 -58
  24. data/ext/ffi_c/libffi/.ci/site.exp +0 -35
  25. data/ext/ffi_c/libffi/.ci/unix-noexec.exp +0 -7
  26. data/ext/ffi_c/libffi/.ci/wine-sim.exp +0 -55
  27. data/ext/ffi_c/libffi/.gail-labels +0 -44
  28. data/ext/ffi_c/libffi/.gitattributes +0 -4
  29. data/ext/ffi_c/libffi/.github/issue_template.md +0 -10
  30. data/ext/ffi_c/libffi/.github/workflows/build.yml +0 -358
  31. data/ext/ffi_c/libffi/.github/workflows/emscripten.yml +0 -215
  32. data/ext/ffi_c/libffi/.github/workflows/label-new-issue.yaml +0 -15
  33. data/ext/ffi_c/libffi/.github/workflows/tarball.yml +0 -55
  34. data/ext/ffi_c/libffi/.gitignore +0 -46
  35. data/ext/ffi_c/libffi/testsuite/Makefile.am +0 -89
  36. data/ext/ffi_c/libffi/testsuite/config/default.exp +0 -1
  37. data/ext/ffi_c/libffi/testsuite/emscripten/build-tests.sh +0 -34
  38. data/ext/ffi_c/libffi/testsuite/emscripten/build.sh +0 -46
  39. data/ext/ffi_c/libffi/testsuite/emscripten/conftest.py +0 -86
  40. data/ext/ffi_c/libffi/testsuite/emscripten/node-tests.sh +0 -23
  41. data/ext/ffi_c/libffi/testsuite/emscripten/test.html +0 -7
  42. data/ext/ffi_c/libffi/testsuite/emscripten/test_libffi.py +0 -51
  43. data/ext/ffi_c/libffi/testsuite/lib/libffi.exp +0 -695
  44. data/ext/ffi_c/libffi/testsuite/lib/target-libpath.exp +0 -283
  45. data/ext/ffi_c/libffi/testsuite/lib/wrapper.exp +0 -45
  46. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/Makefile +0 -28
  47. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/README +0 -78
  48. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/alignof.h +0 -50
  49. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/bhaible.exp +0 -63
  50. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-call.c +0 -1746
  51. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/test-callback.c +0 -2885
  52. data/ext/ffi_c/libffi/testsuite/libffi.bhaible/testcases.c +0 -747
  53. data/ext/ffi_c/libffi/testsuite/libffi.call/align_mixed.c +0 -46
  54. data/ext/ffi_c/libffi/testsuite/libffi.call/align_stdcall.c +0 -46
  55. data/ext/ffi_c/libffi/testsuite/libffi.call/bpo_38748.c +0 -41
  56. data/ext/ffi_c/libffi/testsuite/libffi.call/call.exp +0 -54
  57. data/ext/ffi_c/libffi/testsuite/libffi.call/callback.c +0 -99
  58. data/ext/ffi_c/libffi/testsuite/libffi.call/callback2.c +0 -108
  59. data/ext/ffi_c/libffi/testsuite/libffi.call/callback3.c +0 -114
  60. data/ext/ffi_c/libffi/testsuite/libffi.call/callback4.c +0 -119
  61. data/ext/ffi_c/libffi/testsuite/libffi.call/err_bad_typedef.c +0 -26
  62. data/ext/ffi_c/libffi/testsuite/libffi.call/ffitest.h +0 -166
  63. data/ext/ffi_c/libffi/testsuite/libffi.call/float.c +0 -59
  64. data/ext/ffi_c/libffi/testsuite/libffi.call/float1.c +0 -60
  65. data/ext/ffi_c/libffi/testsuite/libffi.call/float2.c +0 -61
  66. data/ext/ffi_c/libffi/testsuite/libffi.call/float3.c +0 -74
  67. data/ext/ffi_c/libffi/testsuite/libffi.call/float4.c +0 -62
  68. data/ext/ffi_c/libffi/testsuite/libffi.call/float_va.c +0 -110
  69. data/ext/ffi_c/libffi/testsuite/libffi.call/longjmp.c +0 -60
  70. data/ext/ffi_c/libffi/testsuite/libffi.call/many.c +0 -59
  71. data/ext/ffi_c/libffi/testsuite/libffi.call/many2.c +0 -57
  72. data/ext/ffi_c/libffi/testsuite/libffi.call/many_double.c +0 -70
  73. data/ext/ffi_c/libffi/testsuite/libffi.call/many_mixed.c +0 -78
  74. data/ext/ffi_c/libffi/testsuite/libffi.call/negint.c +0 -52
  75. data/ext/ffi_c/libffi/testsuite/libffi.call/offsets.c +0 -46
  76. data/ext/ffi_c/libffi/testsuite/libffi.call/overread.c +0 -54
  77. data/ext/ffi_c/libffi/testsuite/libffi.call/pr1172638.c +0 -127
  78. data/ext/ffi_c/libffi/testsuite/libffi.call/promotion.c +0 -59
  79. data/ext/ffi_c/libffi/testsuite/libffi.call/pyobjc_tc.c +0 -114
  80. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl.c +0 -36
  81. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl1.c +0 -43
  82. data/ext/ffi_c/libffi/testsuite/libffi.call/return_dbl2.c +0 -42
  83. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl.c +0 -35
  84. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl1.c +0 -36
  85. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl2.c +0 -49
  86. data/ext/ffi_c/libffi/testsuite/libffi.call/return_fl3.c +0 -42
  87. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ldl.c +0 -34
  88. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll.c +0 -41
  89. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ll1.c +0 -48
  90. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sc.c +0 -36
  91. data/ext/ffi_c/libffi/testsuite/libffi.call/return_sl.c +0 -42
  92. data/ext/ffi_c/libffi/testsuite/libffi.call/return_uc.c +0 -38
  93. data/ext/ffi_c/libffi/testsuite/libffi.call/return_ul.c +0 -42
  94. data/ext/ffi_c/libffi/testsuite/libffi.call/s55.c +0 -60
  95. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen.c +0 -43
  96. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen2.c +0 -49
  97. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen3.c +0 -49
  98. data/ext/ffi_c/libffi/testsuite/libffi.call/strlen4.c +0 -55
  99. data/ext/ffi_c/libffi/testsuite/libffi.call/struct1.c +0 -67
  100. data/ext/ffi_c/libffi/testsuite/libffi.call/struct10.c +0 -57
  101. data/ext/ffi_c/libffi/testsuite/libffi.call/struct2.c +0 -67
  102. data/ext/ffi_c/libffi/testsuite/libffi.call/struct3.c +0 -60
  103. data/ext/ffi_c/libffi/testsuite/libffi.call/struct4.c +0 -64
  104. data/ext/ffi_c/libffi/testsuite/libffi.call/struct5.c +0 -66
  105. data/ext/ffi_c/libffi/testsuite/libffi.call/struct6.c +0 -64
  106. data/ext/ffi_c/libffi/testsuite/libffi.call/struct7.c +0 -74
  107. data/ext/ffi_c/libffi/testsuite/libffi.call/struct8.c +0 -81
  108. data/ext/ffi_c/libffi/testsuite/libffi.call/struct9.c +0 -68
  109. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_2.c +0 -63
  110. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3.c +0 -65
  111. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_3f.c +0 -65
  112. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4.c +0 -67
  113. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_4f.c +0 -67
  114. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_big.c +0 -93
  115. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_by_value_small.c +0 -61
  116. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_int_float.c +0 -88
  117. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_2H.c +0 -63
  118. data/ext/ffi_c/libffi/testsuite/libffi.call/struct_return_8H.c +0 -90
  119. data/ext/ffi_c/libffi/testsuite/libffi.call/uninitialized.c +0 -61
  120. data/ext/ffi_c/libffi/testsuite/libffi.call/va_1.c +0 -78
  121. data/ext/ffi_c/libffi/testsuite/libffi.call/va_2.c +0 -220
  122. data/ext/ffi_c/libffi/testsuite/libffi.call/va_3.c +0 -154
  123. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct1.c +0 -134
  124. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct2.c +0 -135
  125. data/ext/ffi_c/libffi/testsuite/libffi.call/va_struct3.c +0 -141
  126. data/ext/ffi_c/libffi/testsuite/libffi.call/x32.c +0 -31
  127. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure.exp +0 -67
  128. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn0.c +0 -90
  129. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn1.c +0 -83
  130. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn2.c +0 -83
  131. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn3.c +0 -102
  132. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn4.c +0 -91
  133. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn5.c +0 -94
  134. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_fn6.c +0 -92
  135. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_loc_fn0.c +0 -96
  136. data/ext/ffi_c/libffi/testsuite/libffi.closures/closure_simple.c +0 -61
  137. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_12byte.c +0 -112
  138. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_16byte.c +0 -117
  139. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_18byte.c +0 -120
  140. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_19byte.c +0 -131
  141. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_1_1byte.c +0 -93
  142. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte.c +0 -109
  143. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_20byte1.c +0 -113
  144. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_24byte.c +0 -145
  145. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_2byte.c +0 -103
  146. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3_1byte.c +0 -114
  147. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte1.c +0 -103
  148. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3byte2.c +0 -103
  149. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_3float.c +0 -113
  150. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4_1byte.c +0 -120
  151. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_4byte.c +0 -103
  152. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5_1_byte.c +0 -137
  153. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_5byte.c +0 -116
  154. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_64byte.c +0 -148
  155. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6_1_byte.c +0 -140
  156. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_6byte.c +0 -121
  157. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7_1_byte.c +0 -155
  158. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_7byte.c +0 -121
  159. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_8byte.c +0 -102
  160. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte1.c +0 -103
  161. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_9byte2.c +0 -103
  162. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_double.c +0 -111
  163. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_float.c +0 -109
  164. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble.c +0 -111
  165. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split.c +0 -147
  166. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_longdouble_split2.c +0 -152
  167. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_pointer.c +0 -113
  168. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint16.c +0 -108
  169. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint32.c +0 -106
  170. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_sint64.c +0 -109
  171. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint16.c +0 -108
  172. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint32.c +0 -109
  173. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_align_uint64.c +0 -111
  174. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_dbls_struct.c +0 -68
  175. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double.c +0 -43
  176. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_double_va.c +0 -69
  177. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_float.c +0 -46
  178. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble.c +0 -115
  179. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_longdouble_va.c +0 -80
  180. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_args.c +0 -70
  181. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_many_mixed_float_double.c +0 -55
  182. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_schar.c +0 -78
  183. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshort.c +0 -79
  184. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_sshortchar.c +0 -94
  185. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_uchar.c +0 -99
  186. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushort.c +0 -78
  187. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_multi_ushortchar.c +0 -94
  188. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer.c +0 -79
  189. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_pointer_stack.c +0 -152
  190. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_schar.c +0 -47
  191. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sint.c +0 -44
  192. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_sshort.c +0 -45
  193. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_struct_va1.c +0 -125
  194. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uchar.c +0 -45
  195. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint.c +0 -47
  196. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_uint_va.c +0 -49
  197. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulong_va.c +0 -49
  198. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ulonglong.c +0 -49
  199. data/ext/ffi_c/libffi/testsuite/libffi.closures/cls_ushort.c +0 -46
  200. data/ext/ffi_c/libffi/testsuite/libffi.closures/err_bad_abi.c +0 -36
  201. data/ext/ffi_c/libffi/testsuite/libffi.closures/ffitest.h +0 -1
  202. data/ext/ffi_c/libffi/testsuite/libffi.closures/huge_struct.c +0 -342
  203. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct.c +0 -175
  204. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct1.c +0 -161
  205. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct10.c +0 -146
  206. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct11.c +0 -137
  207. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct12.c +0 -86
  208. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct13.c +0 -115
  209. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct2.c +0 -119
  210. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct3.c +0 -120
  211. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct4.c +0 -120
  212. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct5.c +0 -121
  213. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct6.c +0 -142
  214. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct7.c +0 -120
  215. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct8.c +0 -142
  216. data/ext/ffi_c/libffi/testsuite/libffi.closures/nested_struct9.c +0 -142
  217. data/ext/ffi_c/libffi/testsuite/libffi.closures/problem1.c +0 -90
  218. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs1.c +0 -86
  219. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs2.c +0 -102
  220. data/ext/ffi_c/libffi/testsuite/libffi.closures/single_entry_structs3.c +0 -101
  221. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large.c +0 -145
  222. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_large2.c +0 -148
  223. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium.c +0 -124
  224. data/ext/ffi_c/libffi/testsuite/libffi.closures/stret_medium2.c +0 -125
  225. data/ext/ffi_c/libffi/testsuite/libffi.closures/testclosure.c +0 -75
  226. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest.cc +0 -120
  227. data/ext/ffi_c/libffi/testsuite/libffi.closures/unwindtest_ffi_call.cc +0 -57
  228. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex.inc +0 -91
  229. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_double.c +0 -10
  230. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_float.c +0 -10
  231. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_align_complex_longdouble.c +0 -10
  232. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex.inc +0 -42
  233. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_double.c +0 -10
  234. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_float.c +0 -10
  235. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_longdouble.c +0 -10
  236. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct.inc +0 -71
  237. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_double.c +0 -10
  238. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_float.c +0 -10
  239. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_struct_longdouble.c +0 -10
  240. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va.inc +0 -80
  241. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_double.c +0 -10
  242. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_float.c +0 -16
  243. data/ext/ffi_c/libffi/testsuite/libffi.complex/cls_complex_va_longdouble.c +0 -10
  244. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.exp +0 -36
  245. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex.inc +0 -51
  246. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_double.inc +0 -7
  247. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_float.inc +0 -7
  248. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_defs_longdouble.inc +0 -7
  249. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_double.c +0 -10
  250. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_float.c +0 -10
  251. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_int.c +0 -86
  252. data/ext/ffi_c/libffi/testsuite/libffi.complex/complex_longdouble.c +0 -10
  253. data/ext/ffi_c/libffi/testsuite/libffi.complex/ffitest.h +0 -1
  254. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex.inc +0 -78
  255. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_double.c +0 -10
  256. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_float.c +0 -10
  257. data/ext/ffi_c/libffi/testsuite/libffi.complex/many_complex_longdouble.c +0 -10
  258. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex.inc +0 -37
  259. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1.inc +0 -41
  260. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_double.c +0 -10
  261. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_float.c +0 -10
  262. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex1_longdouble.c +0 -10
  263. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2.inc +0 -44
  264. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_double.c +0 -10
  265. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_float.c +0 -10
  266. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex2_longdouble.c +0 -10
  267. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_double.c +0 -10
  268. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_float.c +0 -10
  269. data/ext/ffi_c/libffi/testsuite/libffi.complex/return_complex_longdouble.c +0 -10
  270. data/ext/ffi_c/libffi/testsuite/libffi.go/aa-direct.c +0 -34
  271. data/ext/ffi_c/libffi/testsuite/libffi.go/closure1.c +0 -28
  272. data/ext/ffi_c/libffi/testsuite/libffi.go/ffitest.h +0 -1
  273. data/ext/ffi_c/libffi/testsuite/libffi.go/go.exp +0 -36
  274. data/ext/ffi_c/libffi/testsuite/libffi.go/static-chain.h +0 -19
  275. data/ext/ffi_c/libffi/testsuite/libffi.threads/ffitest.h +0 -1
  276. data/ext/ffi_c/libffi/testsuite/libffi.threads/threads.exp +0 -50
  277. data/ext/ffi_c/libffi/testsuite/libffi.threads/tsan.c +0 -74
@@ -1,113 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Depending on the ABI. Check overlapping.
4
- Limitations:>none.
5
- PR: none.
6
- Originator: <compnerd@compnerd.org> 20171026 */
7
-
8
- /* { dg-do run } */
9
-
10
- #include "ffitest.h"
11
-
12
- typedef struct cls_struct_3float {
13
- float f;
14
- float g;
15
- float h;
16
- } cls_struct_3float;
17
-
18
- cls_struct_3float cls_struct_3float_fn(struct cls_struct_3float a1,
19
- struct cls_struct_3float a2)
20
- {
21
- struct cls_struct_3float result;
22
-
23
- result.f = a1.f + a2.f;
24
- result.g = a1.g + a2.g;
25
- result.h = a1.h + a2.h;
26
-
27
- printf("%g %g %g %g %g %g: %g %g %g\n", a1.f, a1.g, a1.h,
28
- a2.f, a2.g, a2.h, result.f, result.g, result.h);
29
-
30
- CHECK_FLOAT_EQ(a1.f, 1);
31
- CHECK_FLOAT_EQ(a1.g, 2);
32
- CHECK_FLOAT_EQ(a1.h, 3);
33
-
34
- CHECK_FLOAT_EQ(a2.f, 1);
35
- CHECK_FLOAT_EQ(a2.g, 2);
36
- CHECK_FLOAT_EQ(a2.h, 3);
37
-
38
- CHECK_FLOAT_EQ(result.f, 2);
39
- CHECK_FLOAT_EQ(result.g, 4);
40
- CHECK_FLOAT_EQ(result.h, 6);
41
-
42
- return result;
43
- }
44
-
45
- static void
46
- cls_struct_3float_gn(ffi_cif *cif __UNUSED__, void* resp, void **args,
47
- void* userdata __UNUSED__)
48
- {
49
- struct cls_struct_3float a1, a2;
50
-
51
- a1 = *(struct cls_struct_3float*)(args[0]);
52
- a2 = *(struct cls_struct_3float*)(args[1]);
53
-
54
- *(cls_struct_3float*)resp = cls_struct_3float_fn(a1, a2);
55
- }
56
-
57
- int main (void)
58
- {
59
- ffi_cif cif;
60
- void *code;
61
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
62
- void *args_dbl[3];
63
- ffi_type* cls_struct_fields[4];
64
- ffi_type cls_struct_type;
65
- ffi_type* dbl_arg_types[3];
66
-
67
- struct cls_struct_3float g_dbl = { 1.0f, 2.0f, 3.0f };
68
- struct cls_struct_3float f_dbl = { 1.0f, 2.0f, 3.0f };
69
- struct cls_struct_3float res_dbl;
70
-
71
- cls_struct_fields[0] = &ffi_type_float;
72
- cls_struct_fields[1] = &ffi_type_float;
73
- cls_struct_fields[2] = &ffi_type_float;
74
- cls_struct_fields[3] = NULL;
75
-
76
- cls_struct_type.size = 0;
77
- cls_struct_type.alignment = 0;
78
- cls_struct_type.type = FFI_TYPE_STRUCT;
79
- cls_struct_type.elements = cls_struct_fields;
80
-
81
- dbl_arg_types[0] = &cls_struct_type;
82
- dbl_arg_types[1] = &cls_struct_type;
83
- dbl_arg_types[2] = NULL;
84
-
85
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
86
- dbl_arg_types) == FFI_OK);
87
-
88
- args_dbl[0] = &g_dbl;
89
- args_dbl[1] = &f_dbl;
90
- args_dbl[2] = NULL;
91
-
92
- ffi_call(&cif, FFI_FN(cls_struct_3float_fn), &res_dbl, args_dbl);
93
- /* { dg-output "1 2 3 1 2 3: 2 4 6" } */
94
- printf("res: %g %g %g\n", res_dbl.f, res_dbl.g, res_dbl.h);
95
- /* { dg-output "\nres: 2 4 6" } */
96
- CHECK_FLOAT_EQ(res_dbl.f, 2);
97
- CHECK_FLOAT_EQ(res_dbl.g, 4);
98
- CHECK_FLOAT_EQ(res_dbl.h, 6);
99
-
100
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3float_gn, NULL, code) ==
101
- FFI_OK);
102
-
103
- res_dbl = ((cls_struct_3float(*)(cls_struct_3float,
104
- cls_struct_3float))(code))(g_dbl, f_dbl);
105
- /* { dg-output "\n1 2 3 1 2 3: 2 4 6" } */
106
- printf("res: %g %g %g\n", res_dbl.f, res_dbl.g, res_dbl.h);
107
- /* { dg-output "\nres: 2 4 6" } */
108
- CHECK_FLOAT_EQ(res_dbl.f, 2);
109
- CHECK_FLOAT_EQ(res_dbl.g, 4);
110
- CHECK_FLOAT_EQ(res_dbl.h, 6);
111
-
112
- exit(0);
113
- }
@@ -1,120 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Especially with small structures which may fit in one
4
- register. Depending on the ABI.
5
- Limitations: none.
6
- PR: none.
7
- Originator: <andreast@gcc.gnu.org> 20030902 */
8
-
9
- /* { dg-do run } */
10
- #include "ffitest.h"
11
-
12
- typedef struct cls_struct_4_1byte {
13
- unsigned char a;
14
- unsigned char b;
15
- unsigned char c;
16
- unsigned char d;
17
- } cls_struct_4_1byte;
18
-
19
- cls_struct_4_1byte cls_struct_4_1byte_fn(struct cls_struct_4_1byte a1,
20
- struct cls_struct_4_1byte a2)
21
- {
22
- struct cls_struct_4_1byte result;
23
-
24
- result.a = a1.a + a2.a;
25
- result.b = a1.b + a2.b;
26
- result.c = a1.c + a2.c;
27
- result.d = a1.d + a2.d;
28
-
29
- printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d,
30
- a2.a, a2.b, a2.c, a2.d,
31
- result.a, result.b, result.c, result.d);
32
-
33
- CHECK(a1.a == 12);
34
- CHECK(a1.b == 13);
35
- CHECK(a1.c == 14);
36
- CHECK(a1.d == 15);
37
-
38
- CHECK(a2.a == 178);
39
- CHECK(a2.b == 179);
40
- CHECK(a2.c == 180);
41
- CHECK(a2.d == 181);
42
-
43
- CHECK(result.a == 190);
44
- CHECK(result.b == 192);
45
- CHECK(result.c == 194);
46
- CHECK(result.d == 196);
47
- return result;
48
- }
49
-
50
- static void
51
- cls_struct_4_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
52
- void* userdata __UNUSED__)
53
- {
54
-
55
- struct cls_struct_4_1byte a1, a2;
56
-
57
- a1 = *(struct cls_struct_4_1byte*)(args[0]);
58
- a2 = *(struct cls_struct_4_1byte*)(args[1]);
59
-
60
- *(cls_struct_4_1byte*)resp = cls_struct_4_1byte_fn(a1, a2);
61
- }
62
-
63
- int main (void)
64
- {
65
- ffi_cif cif;
66
- void *code;
67
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
68
- void* args_dbl[5];
69
- ffi_type* cls_struct_fields[5];
70
- ffi_type cls_struct_type;
71
- ffi_type* dbl_arg_types[5];
72
-
73
- struct cls_struct_4_1byte g_dbl = { 12, 13, 14, 15 };
74
- struct cls_struct_4_1byte f_dbl = { 178, 179, 180, 181 };
75
- struct cls_struct_4_1byte res_dbl;
76
-
77
- cls_struct_type.size = 0;
78
- cls_struct_type.alignment = 0;
79
- cls_struct_type.type = FFI_TYPE_STRUCT;
80
- cls_struct_type.elements = cls_struct_fields;
81
-
82
- cls_struct_fields[0] = &ffi_type_uchar;
83
- cls_struct_fields[1] = &ffi_type_uchar;
84
- cls_struct_fields[2] = &ffi_type_uchar;
85
- cls_struct_fields[3] = &ffi_type_uchar;
86
- cls_struct_fields[4] = NULL;
87
-
88
- dbl_arg_types[0] = &cls_struct_type;
89
- dbl_arg_types[1] = &cls_struct_type;
90
- dbl_arg_types[2] = NULL;
91
-
92
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
93
- dbl_arg_types) == FFI_OK);
94
-
95
- args_dbl[0] = &g_dbl;
96
- args_dbl[1] = &f_dbl;
97
- args_dbl[2] = NULL;
98
-
99
- ffi_call(&cif, FFI_FN(cls_struct_4_1byte_fn), &res_dbl, args_dbl);
100
- /* { dg-output "12 13 14 15 178 179 180 181: 190 192 194 196" } */
101
- printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
102
- /* { dg-output "\nres: 190 192 194 196" } */
103
- CHECK(res_dbl.a == 190);
104
- CHECK(res_dbl.b == 192);
105
- CHECK(res_dbl.c == 194);
106
- CHECK(res_dbl.d == 196);
107
-
108
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4_1byte_gn, NULL, code) == FFI_OK);
109
-
110
- res_dbl = ((cls_struct_4_1byte(*)(cls_struct_4_1byte, cls_struct_4_1byte))(code))(g_dbl, f_dbl);
111
- /* { dg-output "\n12 13 14 15 178 179 180 181: 190 192 194 196" } */
112
- printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d);
113
- /* { dg-output "\nres: 190 192 194 196" } */
114
- CHECK(res_dbl.a == 190);
115
- CHECK(res_dbl.b == 192);
116
- CHECK(res_dbl.c == 194);
117
- CHECK(res_dbl.d == 196);
118
-
119
- exit(0);
120
- }
@@ -1,103 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Depending on the ABI. Check overlapping.
4
- Limitations: none.
5
- PR: none.
6
- Originator: <andreast@gcc.gnu.org> 20030828 */
7
-
8
- /* { dg-do run } */
9
-
10
- #include "ffitest.h"
11
-
12
- typedef struct cls_struct_4byte {
13
- unsigned short a;
14
- unsigned short b;
15
- } cls_struct_4byte;
16
-
17
- cls_struct_4byte cls_struct_4byte_fn(struct cls_struct_4byte a1,
18
- struct cls_struct_4byte a2)
19
- {
20
- struct cls_struct_4byte result;
21
-
22
- result.a = a1.a + a2.a;
23
- result.b = a1.b + a2.b;
24
-
25
- printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b);
26
-
27
- CHECK(a1.a == 127);
28
- CHECK(a1.b == 120);
29
-
30
- CHECK(a2.a == 12);
31
- CHECK(a2.b == 128);
32
-
33
- CHECK(result.a == 139);
34
- CHECK(result.b == 248);
35
-
36
- return result;
37
- }
38
-
39
- static void
40
- cls_struct_4byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
41
- void* userdata __UNUSED__)
42
- {
43
-
44
- struct cls_struct_4byte a1, a2;
45
-
46
- a1 = *(struct cls_struct_4byte*)(args[0]);
47
- a2 = *(struct cls_struct_4byte*)(args[1]);
48
-
49
- *(cls_struct_4byte*)resp = cls_struct_4byte_fn(a1, a2);
50
- }
51
-
52
- int main (void)
53
- {
54
- ffi_cif cif;
55
- void *code;
56
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
57
- void* args_dbl[5];
58
- ffi_type* cls_struct_fields[4];
59
- ffi_type cls_struct_type;
60
- ffi_type* dbl_arg_types[5];
61
-
62
- struct cls_struct_4byte g_dbl = { 127, 120 };
63
- struct cls_struct_4byte f_dbl = { 12, 128 };
64
- struct cls_struct_4byte res_dbl;
65
-
66
- cls_struct_type.size = 0;
67
- cls_struct_type.alignment = 0;
68
- cls_struct_type.type = FFI_TYPE_STRUCT;
69
- cls_struct_type.elements = cls_struct_fields;
70
-
71
- cls_struct_fields[0] = &ffi_type_ushort;
72
- cls_struct_fields[1] = &ffi_type_ushort;
73
- cls_struct_fields[2] = NULL;
74
-
75
- dbl_arg_types[0] = &cls_struct_type;
76
- dbl_arg_types[1] = &cls_struct_type;
77
- dbl_arg_types[2] = NULL;
78
-
79
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
80
- dbl_arg_types) == FFI_OK);
81
-
82
- args_dbl[0] = &g_dbl;
83
- args_dbl[1] = &f_dbl;
84
- args_dbl[2] = NULL;
85
-
86
- ffi_call(&cif, FFI_FN(cls_struct_4byte_fn), &res_dbl, args_dbl);
87
- /* { dg-output "127 120 12 128: 139 248" } */
88
- printf("res: %d %d\n", res_dbl.a, res_dbl.b);
89
- /* { dg-output "\nres: 139 248" } */
90
- CHECK(res_dbl.a == 139);
91
- CHECK(res_dbl.b == 248);
92
-
93
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4byte_gn, NULL, code) == FFI_OK);
94
-
95
- res_dbl = ((cls_struct_4byte(*)(cls_struct_4byte, cls_struct_4byte))(code))(g_dbl, f_dbl);
96
- /* { dg-output "\n127 120 12 128: 139 248" } */
97
- printf("res: %d %d\n", res_dbl.a, res_dbl.b);
98
- /* { dg-output "\nres: 139 248" } */
99
- CHECK(res_dbl.a == 139);
100
- CHECK(res_dbl.b == 248);
101
-
102
- exit(0);
103
- }
@@ -1,137 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Depending on the ABI. Check overlapping.
4
- Limitations: none.
5
- PR: none.
6
- Originator: <andreast@gcc.gnu.org> 20050708 */
7
-
8
- /* { dg-do run } */
9
- #include "ffitest.h"
10
-
11
- typedef struct cls_struct_5byte {
12
- unsigned char a;
13
- unsigned char b;
14
- unsigned char c;
15
- unsigned char d;
16
- unsigned char e;
17
- } cls_struct_5byte;
18
-
19
- static cls_struct_5byte cls_struct_5byte_fn(struct cls_struct_5byte a1,
20
- struct cls_struct_5byte a2)
21
- {
22
- struct cls_struct_5byte result;
23
-
24
- result.a = a1.a + a2.a;
25
- result.b = a1.b + a2.b;
26
- result.c = a1.c + a2.c;
27
- result.d = a1.d + a2.d;
28
- result.e = a1.e + a2.e;
29
-
30
- printf("%d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d\n",
31
- a1.a, a1.b, a1.c, a1.d, a1.e,
32
- a2.a, a2.b, a2.c, a2.d, a2.e,
33
- result.a, result.b, result.c, result.d, result.e);
34
-
35
- CHECK(a1.a == 127);
36
- CHECK(a1.b == 120);
37
- CHECK(a1.c == 1);
38
- CHECK(a1.d == 3);
39
- CHECK(a1.e == 4);
40
-
41
- CHECK(a2.a == 12);
42
- CHECK(a2.b == 128);
43
- CHECK(a2.c == 9);
44
- CHECK(a2.d == 3);
45
- CHECK(a2.e == 4);
46
-
47
- CHECK(result.a == 139);
48
- CHECK(result.b == 248);
49
- CHECK(result.c == 10);
50
- CHECK(result.d == 6);
51
- CHECK(result.e == 8);
52
-
53
- return result;
54
- }
55
-
56
- static void
57
- cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
58
- void* userdata __UNUSED__)
59
- {
60
-
61
- struct cls_struct_5byte a1, a2;
62
-
63
- a1 = *(struct cls_struct_5byte*)(args[0]);
64
- a2 = *(struct cls_struct_5byte*)(args[1]);
65
-
66
- *(cls_struct_5byte*)resp = cls_struct_5byte_fn(a1, a2);
67
- }
68
-
69
- int main (void)
70
- {
71
- ffi_cif cif;
72
- void *code;
73
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
74
- void* args_dbl[5];
75
- ffi_type* cls_struct_fields[6];
76
- ffi_type cls_struct_type;
77
- ffi_type* dbl_arg_types[5];
78
-
79
- struct cls_struct_5byte g_dbl = { 127, 120, 1, 3, 4 };
80
- struct cls_struct_5byte f_dbl = { 12, 128, 9, 3, 4 };
81
- struct cls_struct_5byte res_dbl = { 0, 0, 0, 0, 0 };
82
-
83
- cls_struct_type.size = 0;
84
- cls_struct_type.alignment = 0;
85
- cls_struct_type.type = FFI_TYPE_STRUCT;
86
- cls_struct_type.elements = cls_struct_fields;
87
-
88
- cls_struct_fields[0] = &ffi_type_uchar;
89
- cls_struct_fields[1] = &ffi_type_uchar;
90
- cls_struct_fields[2] = &ffi_type_uchar;
91
- cls_struct_fields[3] = &ffi_type_uchar;
92
- cls_struct_fields[4] = &ffi_type_uchar;
93
- cls_struct_fields[5] = NULL;
94
-
95
- dbl_arg_types[0] = &cls_struct_type;
96
- dbl_arg_types[1] = &cls_struct_type;
97
- dbl_arg_types[2] = NULL;
98
-
99
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
100
- dbl_arg_types) == FFI_OK);
101
-
102
- args_dbl[0] = &g_dbl;
103
- args_dbl[1] = &f_dbl;
104
- args_dbl[2] = NULL;
105
-
106
- ffi_call(&cif, FFI_FN(cls_struct_5byte_fn), &res_dbl, args_dbl);
107
- /* { dg-output "127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */
108
- printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
109
- res_dbl.d, res_dbl.e);
110
- /* { dg-output "\nres: 139 248 10 6 8" } */
111
- CHECK(res_dbl.a == 139);
112
- CHECK(res_dbl.b == 248);
113
- CHECK(res_dbl.c == 10);
114
- CHECK(res_dbl.d == 6);
115
- CHECK(res_dbl.e == 8);
116
-
117
- res_dbl.a = 0;
118
- res_dbl.b = 0;
119
- res_dbl.c = 0;
120
- res_dbl.d = 0;
121
- res_dbl.e = 0;
122
-
123
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK);
124
-
125
- res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl);
126
- /* { dg-output "\n127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */
127
- printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c,
128
- res_dbl.d, res_dbl.e);
129
- /* { dg-output "\nres: 139 248 10 6 8" } */
130
- CHECK(res_dbl.a == 139);
131
- CHECK(res_dbl.b == 248);
132
- CHECK(res_dbl.c == 10);
133
- CHECK(res_dbl.d == 6);
134
- CHECK(res_dbl.e == 8);
135
-
136
- exit(0);
137
- }
@@ -1,116 +0,0 @@
1
- /* Area: ffi_call, closure_call
2
- Purpose: Check structure passing with different structure size.
3
- Depending on the ABI. Check overlapping.
4
- Limitations: none.
5
- PR: none.
6
- Originator: <andreast@gcc.gnu.org> 20030828 */
7
-
8
- /* { dg-do run } */
9
- #include "ffitest.h"
10
-
11
- typedef struct cls_struct_5byte {
12
- unsigned short a;
13
- unsigned short b;
14
- unsigned char c;
15
- } cls_struct_5byte;
16
-
17
- static cls_struct_5byte cls_struct_5byte_fn(struct cls_struct_5byte a1,
18
- struct cls_struct_5byte a2)
19
- {
20
- struct cls_struct_5byte result;
21
-
22
- result.a = a1.a + a2.a;
23
- result.b = a1.b + a2.b;
24
- result.c = a1.c + a2.c;
25
-
26
- printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c,
27
- a2.a, a2.b, a2.c,
28
- result.a, result.b, result.c);
29
-
30
- CHECK(a1.a == 127);
31
- CHECK(a1.b == 120);
32
- CHECK(a1.c == 1);
33
-
34
- CHECK(a2.a == 12);
35
- CHECK(a2.b == 128);
36
- CHECK(a2.c == 9);
37
-
38
- CHECK(result.a == 139);
39
- CHECK(result.b == 248);
40
- CHECK(result.c == 10);
41
-
42
- return result;
43
- }
44
-
45
- static void
46
- cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args,
47
- void* userdata __UNUSED__)
48
- {
49
-
50
- struct cls_struct_5byte a1, a2;
51
-
52
- a1 = *(struct cls_struct_5byte*)(args[0]);
53
- a2 = *(struct cls_struct_5byte*)(args[1]);
54
-
55
- *(cls_struct_5byte*)resp = cls_struct_5byte_fn(a1, a2);
56
- }
57
-
58
- int main (void)
59
- {
60
- ffi_cif cif;
61
- void *code;
62
- ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
63
- void* args_dbl[5];
64
- ffi_type* cls_struct_fields[4];
65
- ffi_type cls_struct_type;
66
- ffi_type* dbl_arg_types[5];
67
-
68
- struct cls_struct_5byte g_dbl = { 127, 120, 1 };
69
- struct cls_struct_5byte f_dbl = { 12, 128, 9 };
70
- struct cls_struct_5byte res_dbl = { 0, 0, 0 };
71
-
72
- cls_struct_type.size = 0;
73
- cls_struct_type.alignment = 0;
74
- cls_struct_type.type = FFI_TYPE_STRUCT;
75
- cls_struct_type.elements = cls_struct_fields;
76
-
77
- cls_struct_fields[0] = &ffi_type_ushort;
78
- cls_struct_fields[1] = &ffi_type_ushort;
79
- cls_struct_fields[2] = &ffi_type_uchar;
80
- cls_struct_fields[3] = NULL;
81
-
82
- dbl_arg_types[0] = &cls_struct_type;
83
- dbl_arg_types[1] = &cls_struct_type;
84
- dbl_arg_types[2] = NULL;
85
-
86
- CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type,
87
- dbl_arg_types) == FFI_OK);
88
-
89
- args_dbl[0] = &g_dbl;
90
- args_dbl[1] = &f_dbl;
91
- args_dbl[2] = NULL;
92
-
93
- ffi_call(&cif, FFI_FN(cls_struct_5byte_fn), &res_dbl, args_dbl);
94
- /* { dg-output "127 120 1 12 128 9: 139 248 10" } */
95
- printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
96
- /* { dg-output "\nres: 139 248 10" } */
97
- CHECK(res_dbl.a == 139);
98
- CHECK(res_dbl.b == 248);
99
- CHECK(res_dbl.c == 10);
100
-
101
- res_dbl.a = 0;
102
- res_dbl.b = 0;
103
- res_dbl.c = 0;
104
-
105
- CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK);
106
-
107
- res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl);
108
- /* { dg-output "\n127 120 1 12 128 9: 139 248 10" } */
109
- printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c);
110
- /* { dg-output "\nres: 139 248 10" } */
111
- CHECK(res_dbl.a == 139);
112
- CHECK(res_dbl.b == 248);
113
- CHECK(res_dbl.c == 10);
114
-
115
- exit(0);
116
- }