Nicholas Nethercote 07045477ca Merge the DARWIN branch onto the trunk.
I tried using 'svn merge' to do the merge but it did a terrible job and
there were bazillions of conflicts.  So instead I just took the diff between
the branch and trunk  at r10155, applied the diff to the trunk, 'svn add'ed
the added files (no files needed to be 'svn remove'd) and committed.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10156
2009-05-28 01:53:07 +00:00

77 lines
2.5 KiB
C

// These #defines attempt to ensure that posix_memalign() is declared, and
// so no spurious warning is given about using it.
// Advertise compliance of the code to the XSI (a POSIX superset that
// defines what a system must be like to be called "UNIX")
#undef _XOPEN_SOURCE
#define _XOPEN_SOURCE 600
// Advertise compliance to POSIX
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200112L
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include "tests/malloc.h"
#include <errno.h>
int main ( void )
{
# if defined(VGO_aix5)
// AIX 5.2 has neither memalign() nor posix_memalign(); do nothing.
# elif defined(VGO_darwin)
// Likewise for Mac OS X.
# else
// Nb: assuming VG_MIN_MALLOC_SZB is 8 or more...
int* p;
int res;
assert(sizeof(long int) == sizeof(void*));
p = memalign(0, 100); assert(0 == (long)p % 8);
p = memalign(1, 100); assert(0 == (long)p % 8);
p = memalign(2, 100); assert(0 == (long)p % 8);
p = memalign(3, 100); assert(0 == (long)p % 8);
p = memalign(4, 100); assert(0 == (long)p % 8);
p = memalign(5, 100); assert(0 == (long)p % 8);
p = memalign(7, 100); assert(0 == (long)p % 8);
p = memalign(8, 100); assert(0 == (long)p % 8);
p = memalign(9, 100); assert(0 == (long)p % 16);
p = memalign(31, 100); assert(0 == (long)p % 32);
p = memalign(32, 100); assert(0 == (long)p % 32);
p = memalign(33, 100); assert(0 == (long)p % 64);
p = memalign(4095, 100); assert(0 == (long)p % 4096);
p = memalign(4096, 100); assert(0 == (long)p % 4096);
p = memalign(4097, 100); assert(0 == (long)p % 8192);
# define PM(a,b,c) posix_memalign((void**)a, b, c)
res = PM(&p, -1,100); assert(EINVAL == res);
res = PM(&p, 0, 100); assert(0 == res && 0 == (long)p % 8);
res = PM(&p, 1, 100); assert(EINVAL == res);
res = PM(&p, 2, 100); assert(EINVAL == res);
res = PM(&p, 3, 100); assert(EINVAL == res);
res = PM(&p, sizeof(void*), 100);
assert(0 == res && 0 == (long)p % sizeof(void*));
res = PM(&p, 31, 100); assert(EINVAL == res);
res = PM(&p, 32, 100); assert(0 == res &&
0 == (long)p % 32);
res = PM(&p, 33, 100); assert(EINVAL == res);
res = PM(&p, 4095, 100); assert(EINVAL == res);
res = PM(&p, 4096, 100); assert(0 == res &&
0 == (long)p % 4096);
res = PM(&p, 4097, 100); assert(EINVAL == res);
# endif
return 0;
}