alloc-9.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. #include <omp.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. const omp_alloctrait_t traits2[]
  5. = { { omp_atk_alignment, 16 },
  6. { omp_atk_sync_hint, omp_atv_default },
  7. { omp_atk_access, omp_atv_default },
  8. { omp_atk_pool_size, 1024 },
  9. { omp_atk_fallback, omp_atv_default_mem_fb },
  10. { omp_atk_partition, omp_atv_environment } };
  11. omp_alloctrait_t traits3[]
  12. = { { omp_atk_sync_hint, omp_atv_uncontended },
  13. { omp_atk_alignment, 32 },
  14. { omp_atk_access, omp_atv_all },
  15. { omp_atk_pool_size, 512 },
  16. { omp_atk_fallback, omp_atv_allocator_fb },
  17. { omp_atk_fb_data, 0 },
  18. { omp_atk_partition, omp_atv_default } };
  19. const omp_alloctrait_t traits4[]
  20. = { { omp_atk_alignment, 128 },
  21. { omp_atk_pool_size, 1024 },
  22. { omp_atk_fallback, omp_atv_null_fb } };
  23. int
  24. main ()
  25. {
  26. int *volatile p = (int *) omp_alloc (3 * sizeof (int), omp_default_mem_alloc);
  27. int *volatile q;
  28. int *volatile r;
  29. omp_alloctrait_t traits[3]
  30. = { { omp_atk_alignment, 64 },
  31. { omp_atk_fallback, omp_atv_null_fb },
  32. { omp_atk_pool_size, 4096 } };
  33. omp_alloctrait_t traits5[2]
  34. = { { omp_atk_fallback, omp_atv_null_fb },
  35. { omp_atk_pool_size, 4096 } };
  36. omp_allocator_handle_t a, a2;
  37. if ((((uintptr_t) p) % __alignof (int)) != 0)
  38. abort ();
  39. p[0] = 1;
  40. p[1] = 2;
  41. p[2] = 3;
  42. p = (int *) omp_realloc (p, 4 * sizeof (int), omp_default_mem_alloc, omp_default_mem_alloc);
  43. if ((((uintptr_t) p) % __alignof (int)) != 0 || p[0] != 1 || p[1] != 2 || p[2] != 3)
  44. abort ();
  45. p[0] = 4;
  46. p[1] = 5;
  47. p[2] = 6;
  48. p[3] = 7;
  49. p = (int *) omp_realloc (p, 2 * sizeof (int), omp_default_mem_alloc, omp_default_mem_alloc);
  50. if ((((uintptr_t) p) % __alignof (int)) != 0 || p[0] != 4 || p[1] != 5)
  51. abort ();
  52. p[0] = 8;
  53. p[1] = 9;
  54. if (omp_realloc (p, 0, omp_null_allocator, omp_default_mem_alloc) != NULL)
  55. abort ();
  56. p = (int *) omp_realloc (NULL, 2 * sizeof (int), omp_default_mem_alloc, omp_null_allocator);
  57. if ((((uintptr_t) p) % __alignof (int)) != 0)
  58. abort ();
  59. p[0] = 1;
  60. p[1] = 2;
  61. p = (int *) omp_realloc (p, 5 * sizeof (int), omp_default_mem_alloc, omp_default_mem_alloc);
  62. if ((((uintptr_t) p) % __alignof (int)) != 0 || p[0] != 1 || p[1] != 2)
  63. abort ();
  64. p[0] = 3;
  65. p[1] = 4;
  66. p[2] = 5;
  67. p[3] = 6;
  68. p[4] = 7;
  69. omp_free (p, omp_null_allocator);
  70. omp_set_default_allocator (omp_default_mem_alloc);
  71. if (omp_realloc (NULL, 0, omp_null_allocator, omp_null_allocator) != NULL)
  72. abort ();
  73. p = (int *) omp_alloc (sizeof (int), omp_null_allocator);
  74. if ((((uintptr_t) p) % __alignof (int)) != 0)
  75. abort ();
  76. p[0] = 3;
  77. p = (int *) omp_realloc (p, 3 * sizeof (int), omp_null_allocator, omp_null_allocator);
  78. if ((((uintptr_t) p) % __alignof (int)) != 0 || p[0] != 3)
  79. abort ();
  80. p[0] = 4;
  81. p[1] = 5;
  82. p[2] = 6;
  83. if (omp_realloc (p, 0, omp_null_allocator, omp_get_default_allocator ()) != NULL)
  84. abort ();
  85. a = omp_init_allocator (omp_default_mem_space, 3, traits);
  86. if (a == omp_null_allocator)
  87. abort ();
  88. p = (int *) omp_alloc (sizeof (int), a);
  89. if ((((uintptr_t) p) % 64) != 0)
  90. abort ();
  91. p[0] = 7;
  92. p = (int *) omp_realloc (p, 3072, a, a);
  93. if ((((uintptr_t) p) % 64) != 0 || p[0] != 7)
  94. abort ();
  95. p[0] = 1;
  96. p[3071 / sizeof (int)] = 2;
  97. q = (int *) omp_alloc (sizeof (int), a);
  98. if ((((uintptr_t) q) % 64) != 0)
  99. abort ();
  100. q[0] = 8;
  101. if (omp_realloc (q, 3072, a, a) != NULL)
  102. abort ();
  103. omp_free (p, a);
  104. omp_free (q, a);
  105. p = (int *) omp_alloc (sizeof (int), a);
  106. p[0] = 42;
  107. p = (int *) omp_realloc (p, 3072, a, a);
  108. if (p[0] != 42)
  109. abort ();
  110. p[0] = 3;
  111. p[3071 / sizeof (int)] = 4;
  112. omp_realloc (p, 0, omp_null_allocator, omp_null_allocator);
  113. omp_set_default_allocator (a);
  114. if (omp_get_default_allocator () != a)
  115. abort ();
  116. p = (int *) omp_alloc (31, omp_null_allocator);
  117. if (p == NULL)
  118. abort ();
  119. p = (int *) omp_realloc (p, 3072, omp_null_allocator, omp_null_allocator);
  120. if (p == NULL)
  121. abort ();
  122. q = (int *) omp_alloc (sizeof (int), omp_null_allocator);
  123. if (q == NULL)
  124. abort ();
  125. if (omp_realloc (q, 3072, omp_null_allocator, omp_null_allocator) != NULL)
  126. abort ();
  127. omp_free (p, a);
  128. omp_free (q, a);
  129. omp_destroy_allocator (a);
  130. a = omp_init_allocator (omp_default_mem_space, 2, traits5);
  131. if (a == omp_null_allocator)
  132. abort ();
  133. omp_set_default_allocator (a);
  134. if (omp_get_default_allocator () != a)
  135. abort ();
  136. p = (int *) omp_alloc (3071, omp_null_allocator);
  137. if (p == NULL)
  138. abort ();
  139. p = (int *) omp_realloc (p, 3072, omp_null_allocator, omp_null_allocator);
  140. if (p == NULL)
  141. abort ();
  142. q = (int *) omp_alloc (sizeof (int), omp_null_allocator);
  143. if (q == NULL)
  144. abort ();
  145. if (omp_realloc (q, 3072, omp_null_allocator, omp_null_allocator) != NULL)
  146. abort ();
  147. omp_free (p, a);
  148. omp_free (q, a);
  149. omp_destroy_allocator (a);
  150. a = omp_init_allocator (omp_default_mem_space,
  151. sizeof (traits2) / sizeof (traits2[0]),
  152. traits2);
  153. if (a == omp_null_allocator)
  154. abort ();
  155. if (traits3[5].key != omp_atk_fb_data)
  156. abort ();
  157. traits3[5].value = (uintptr_t) a;
  158. a2 = omp_init_allocator (omp_default_mem_space,
  159. sizeof (traits3) / sizeof (traits3[0]),
  160. traits3);
  161. if (a2 == omp_null_allocator)
  162. abort ();
  163. p = (int *) omp_alloc (sizeof (int), a2);
  164. if ((((uintptr_t) p) % 32) != 0)
  165. abort ();
  166. p[0] = 84;
  167. p = (int *) omp_realloc (p, 380, a2, a2);
  168. if ((((uintptr_t) p) % 32) != 0 || p[0] != 84)
  169. abort ();
  170. p[0] = 5;
  171. p[379 / sizeof (int)] = 6;
  172. q = (int *) omp_alloc (sizeof (int), a2);
  173. if ((((uintptr_t) q) % 32) != 0)
  174. abort ();
  175. q[0] = 42;
  176. q = (int *) omp_realloc (q, 768, a2, a2);
  177. if ((((uintptr_t) q) % 16) != 0 || q[0] != 42)
  178. abort ();
  179. q[0] = 7;
  180. q[767 / sizeof (int)] = 8;
  181. r = (int *) omp_realloc (NULL, 512, a2, omp_null_allocator);
  182. if ((((uintptr_t) r) % __alignof (int)) != 0)
  183. abort ();
  184. r[0] = 9;
  185. r[511 / sizeof (int)] = 10;
  186. omp_free (p, omp_null_allocator);
  187. omp_free (q, a2);
  188. omp_free (r, omp_null_allocator);
  189. p = (int *) omp_alloc (sizeof (int), a2);
  190. if ((((uintptr_t) p) % 32) != 0)
  191. abort ();
  192. p[0] = 85;
  193. p = (int *) omp_realloc (p, 320, a, a2);
  194. if ((((uintptr_t) p) % 16) != 0 || p[0] != 85)
  195. abort ();
  196. p[0] = 5;
  197. p[319 / sizeof (int)] = 6;
  198. q = (int *) omp_alloc (sizeof (int), a);
  199. if ((((uintptr_t) q) % 16) != 0)
  200. abort ();
  201. q[0] = 43;
  202. q = (int *) omp_realloc (q, 320, a2, a);
  203. if ((((uintptr_t) q) % 32) != 0 || q[0] != 43)
  204. abort ();
  205. q[0] = 44;
  206. q[319 / sizeof (int)] = 8;
  207. q = (int *) omp_realloc (q, 568, a2, a2);
  208. if ((((uintptr_t) q) % 16) != 0 || q[0] != 44)
  209. abort ();
  210. q[0] = 7;
  211. q[567 / sizeof (int)] = 8;
  212. omp_free (p, omp_null_allocator);
  213. omp_free (q, a2);
  214. omp_destroy_allocator (a2);
  215. omp_destroy_allocator (a);
  216. a = omp_init_allocator (omp_default_mem_space,
  217. sizeof (traits4) / sizeof (traits4[0]),
  218. traits4);
  219. if (a == omp_null_allocator)
  220. abort ();
  221. if (traits3[5].key != omp_atk_fb_data)
  222. abort ();
  223. traits3[5].value = (uintptr_t) a;
  224. a2 = omp_init_allocator (omp_default_mem_space,
  225. sizeof (traits3) / sizeof (traits3[0]),
  226. traits3);
  227. if (a2 == omp_null_allocator)
  228. abort ();
  229. omp_set_default_allocator (a2);
  230. #ifdef __cplusplus
  231. p = static_cast <int *> (omp_realloc (NULL, 420));
  232. #else
  233. p = (int *) omp_realloc (NULL, 420, omp_null_allocator, omp_null_allocator);
  234. #endif
  235. if ((((uintptr_t) p) % 32) != 0)
  236. abort ();
  237. p[0] = 5;
  238. p[419 / sizeof (int)] = 6;
  239. q = (int *) omp_realloc (NULL, sizeof (int), omp_null_allocator, omp_null_allocator);
  240. if ((((uintptr_t) q) % 32) != 0)
  241. abort ();
  242. q[0] = 99;
  243. q = (int *) omp_realloc (q, 700, omp_null_allocator, omp_null_allocator);
  244. if ((((uintptr_t) q) % 128) != 0 || q[0] != 99)
  245. abort ();
  246. q[0] = 7;
  247. q[699 / sizeof (int)] = 8;
  248. if (omp_realloc (NULL, 768, omp_null_allocator, omp_null_allocator) != NULL)
  249. abort ();
  250. #ifdef __cplusplus
  251. omp_free (p);
  252. if (omp_realloc (q, 0) != NULL)
  253. abort ();
  254. omp_free (NULL);
  255. #else
  256. omp_free (p, omp_null_allocator);
  257. if (omp_realloc (q, 0, omp_null_allocator, omp_null_allocator) != NULL)
  258. abort ();
  259. omp_free (NULL, omp_null_allocator);
  260. #endif
  261. omp_free (NULL, omp_null_allocator);
  262. omp_destroy_allocator (a2);
  263. omp_destroy_allocator (a);
  264. return 0;
  265. }