Index: compiler-rt/trunk/test/scudo/memalign.cpp =================================================================== --- compiler-rt/trunk/test/scudo/memalign.cpp +++ compiler-rt/trunk/test/scudo/memalign.cpp @@ -10,6 +10,12 @@ #include #include +// Reduce the size of the quarantine, or the test can run out of aligned memory +// on 32-bit for the larger alignments. +extern "C" const char *__scudo_default_options() { + return "QuarantineSizeMb=1"; +} + // Sometimes the headers may not have this... extern "C" void *aligned_alloc (size_t alignment, size_t size); @@ -31,18 +37,28 @@ return 1; free(p); // Tests various combinations of alignment and sizes - for (int i = (sizeof(void *) == 4) ? 3 : 4; i <= 24; i++) { + for (int i = (sizeof(void *) == 4) ? 3 : 4; i < 19; i++) { alignment = 1U << i; for (int j = 1; j < 33; j++) { size = 0x800 * j; for (int k = 0; k < 3; k++) { - p = memalign(alignment, size - (16 * k)); + p = memalign(alignment, size - (2 * sizeof(void *) * k)); if (!p) return 1; free(p); } } } + // For larger alignment, reduce the number of allocations to avoid running + // out of potential addresses (on 32-bit). + for (int i = 19; i <= 24; i++) { + for (int k = 0; k < 3; k++) { + p = memalign(alignment, 0x1000 - (2 * sizeof(void *) * k)); + if (!p) + return 1; + free(p); + } + } } if (!strcmp(argv[1], "invalid")) { p = memalign(alignment - 1, size);