blob: bde9836d5a8c48c02f9c68c925932739cdd1e255 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
#ifndef GC_IGNORE_WARN
/* Ignore misleading "Out of Memory!" warning (which is printed on */
/* every GC_MALLOC(LONG_MAX) call) by defining this macro before */
/* "gc.h" inclusion. */
# define GC_IGNORE_WARN
#endif
#include "gc.h"
/*
* Check that very large allocation requests fail. "Success" would usually
* indicate that the size was somehow converted to a negative
* number. Clients shouldn't do this, but we should fail in the
* expected manner.
*/
int main(void)
{
GC_INIT();
GC_set_max_heap_size(100*1024*1024);
/* Otherwise heap expansion aborts when deallocating large block. */
/* That's OK. We test this corner case mostly to make sure that */
/* it fails predictably. */
GC_expand_hp(1024*1024*5);
if (sizeof(long) == sizeof(void *)) {
void *r = GC_MALLOC(LONG_MAX-1024);
if (0 != r) {
fprintf(stderr,
"Size LONG_MAX-1024 allocation unexpectedly succeeded\n");
exit(1);
}
r = GC_MALLOC(LONG_MAX);
if (0 != r) {
fprintf(stderr,
"Size LONG_MAX allocation unexpectedly succeeded\n");
exit(1);
}
r = GC_MALLOC((size_t)LONG_MAX + 1024);
if (0 != r) {
fprintf(stderr,
"Size LONG_MAX+1024 allocation unexpectedly succeeded\n");
exit(1);
}
}
return 0;
}
|