diff --git a/mps/code/abq.c b/mps/code/abq.c index 596921dd09a..b915bb42c9b 100644 --- a/mps/code/abq.c +++ b/mps/code/abq.c @@ -107,7 +107,7 @@ Bool ABQPush(ABQ abq, void *element) if (ABQIsFull(abq)) return FALSE; - mps_lib_memcpy(ABQElement(abq, abq->in), element, abq->elementSize); + (void)mps_lib_memcpy(ABQElement(abq, abq->in), element, abq->elementSize); abq->in = ABQNextIndex(abq, abq->in); AVERT(ABQ, abq); @@ -126,7 +126,7 @@ Bool ABQPop(ABQ abq, void *elementReturn) if (ABQIsEmpty(abq)) return FALSE; - mps_lib_memcpy(elementReturn, ABQElement(abq, abq->out), abq->elementSize); + (void)mps_lib_memcpy(elementReturn, ABQElement(abq, abq->out), abq->elementSize); abq->out = ABQNextIndex(abq, abq->out); @@ -146,7 +146,7 @@ Bool ABQPeek(ABQ abq, void *elementReturn) if (ABQIsEmpty(abq)) return FALSE; - mps_lib_memcpy(elementReturn, ABQElement(abq, abq->out), abq->elementSize); + (void)mps_lib_memcpy(elementReturn, ABQElement(abq, abq->out), abq->elementSize); /* Identical to pop, but don't increment out */ @@ -261,7 +261,7 @@ void ABQIterate(ABQ abq, ABQIterateMethod iterate, void *closureP, Size closureS AVERT(Bool, delete); if (!delete) { if (copy != index) - mps_lib_memcpy(ABQElement(abq, copy), element, abq->elementSize); + (void)mps_lib_memcpy(ABQElement(abq, copy), element, abq->elementSize); copy = ABQNextIndex(abq, copy); } index = ABQNextIndex(abq, index); @@ -272,8 +272,8 @@ void ABQIterate(ABQ abq, ABQIterateMethod iterate, void *closureP, Size closureS /* If any elements were deleted, need to copy remainder of queue. */ if (copy != index) { while (index != in) { - mps_lib_memcpy(ABQElement(abq, copy), ABQElement(abq, index), - abq->elementSize); + (void)mps_lib_memcpy(ABQElement(abq, copy), ABQElement(abq, index), + abq->elementSize); copy = ABQNextIndex(abq, copy); index = ABQNextIndex(abq, index); } diff --git a/mps/code/abqtest.c b/mps/code/abqtest.c index 350f0e89f86..4cff09f1745 100644 --- a/mps/code/abqtest.c +++ b/mps/code/abqtest.c @@ -130,7 +130,7 @@ static void step(void) DestroyTestBlock(a); break; default: - if (!deleted & (pushee > popee)) { + if (!deleted && (pushee > popee)) { TestBlock b; TestClosureStruct cl; deleted = (unsigned)abqRnd (pushee - popee) + popee; diff --git a/mps/code/amcss.c b/mps/code/amcss.c index bf0c6611174..1b32c849769 100644 --- a/mps/code/amcss.c +++ b/mps/code/amcss.c @@ -285,7 +285,7 @@ static void test(mps_arena_t arena) if (objs % 1024 == 0) { report(arena); putchar('.'); - fflush(stdout); + (void)fflush(stdout); } ++objs; diff --git a/mps/code/amcsshe.c b/mps/code/amcsshe.c index 5ad7c064f5d..248929240d0 100644 --- a/mps/code/amcsshe.c +++ b/mps/code/amcsshe.c @@ -236,7 +236,7 @@ static void *test(void *arg, size_t s) if (objs % 1024 == 0) { report(arena); putchar('.'); - fflush(stdout); + (void)fflush(stdout); } ++objs; diff --git a/mps/code/amsss.c b/mps/code/amsss.c index a0a1fe666e6..c678f26ff45 100644 --- a/mps/code/amsss.c +++ b/mps/code/amsss.c @@ -152,7 +152,7 @@ static void *test(void *arg, size_t haveAmbigous) lastStep = totalSize; printf("\nSize %"PRIuLONGEST" bytes, %lu objects.\n", (ulongest_t)totalSize, objs); - fflush(stdout); + (void)fflush(stdout); for(i = 0; i < exactRootsCOUNT; ++i) cdie(exactRoots[i] == objNULL || dylan_check(exactRoots[i]), "all roots check"); @@ -184,7 +184,7 @@ static void *test(void *arg, size_t haveAmbigous) if (objs % 256 == 0) { printf("."); report(); - fflush(stdout); + (void)fflush(stdout); } } diff --git a/mps/code/amssshe.c b/mps/code/amssshe.c index 4787ef80e6f..37408340a00 100644 --- a/mps/code/amssshe.c +++ b/mps/code/amssshe.c @@ -111,7 +111,7 @@ static void *test(void *arg, size_t s) lastStep = totalSize; printf("\nSize %"PRIuLONGEST" bytes, %lu objects.\n", (ulongest_t)totalSize, objs); - fflush(stdout); + (void)fflush(stdout); for(i = 0; i < exactRootsCOUNT; ++i) cdie(exactRoots[i] == objNULL || dylan_check(exactRoots[i]), "all roots check"); @@ -139,7 +139,7 @@ static void *test(void *arg, size_t s) ++objs; if (objs % 256 == 0) { printf("."); - fflush(stdout); + (void)fflush(stdout); } } diff --git a/mps/code/apss.c b/mps/code/apss.c index aaa5da0957b..8016f9b1aa5 100644 --- a/mps/code/apss.c +++ b/mps/code/apss.c @@ -111,11 +111,6 @@ static mps_res_t stress(mps_class_t class, size_t (*size)(unsigned long i), } -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -#define alignUp(w, a) (((w) + (a) - 1) & ~((size_t)(a) - 1)) - - /* randomSizeAligned -- produce sizes both large and small, * aligned by platform alignment */ diff --git a/mps/code/arena.c b/mps/code/arena.c index 21ceea8c1e3..d5833c65441 100644 --- a/mps/code/arena.c +++ b/mps/code/arena.c @@ -155,7 +155,7 @@ Bool ArenaCheck(Arena arena) CHECKL(BoolCheck(arena->hasFreeCBS)); if (arena->hasFreeCBS) - CBSCheck(ArenaFreeCBS(arena)); + CHECKL(CBSCheck(ArenaFreeCBS(arena))); return TRUE; } diff --git a/mps/code/arenavm.c b/mps/code/arenavm.c index 68753cd6e87..d37fb96c485 100644 --- a/mps/code/arenavm.c +++ b/mps/code/arenavm.c @@ -530,7 +530,7 @@ static Res VMArenaInit(Arena *arenaReturn, ArenaClass class, ArgList args) /* Copy the stack-allocated VM parameters into their home in the VMArena. */ AVER(sizeof(vmArena->vmParams) == sizeof(vmParams)); - mps_lib_memcpy(vmArena->vmParams, vmParams, sizeof(vmArena->vmParams)); + (void)mps_lib_memcpy(vmArena->vmParams, vmParams, sizeof(vmArena->vmParams)); /* */ vmArena->extendBy = userSize; diff --git a/mps/code/awlut.c b/mps/code/awlut.c index 8af4bcd4bbc..a8d96d930e0 100644 --- a/mps/code/awlut.c +++ b/mps/code/awlut.c @@ -216,7 +216,7 @@ static void test(mps_arena_t arena, } } - mps_arena_collect(arena); + die(mps_arena_collect(arena), "mps_arena_collect"); mps_arena_release(arena); for(i = 0; i < TABLE_SLOTS; ++i) { diff --git a/mps/code/awluthe.c b/mps/code/awluthe.c index 9fb1281dcc1..be07c7b48f6 100644 --- a/mps/code/awluthe.c +++ b/mps/code/awluthe.c @@ -221,7 +221,7 @@ static void test(mps_arena_t arena, } } - mps_arena_collect(arena); + die(mps_arena_collect(arena), "mps_arena_collect"); mps_arena_release(arena); for(i = 0; i < TABLE_SLOTS; ++i) { @@ -274,8 +274,8 @@ static void *setup(void *v, size_t s) die(mps_root_create_reg(&stack, arena, mps_rank_ambig(), 0, thr, mps_stack_scan_ambig, v, 0), "Root Create\n"); - EnsureHeaderFormat(&dylanfmt, arena); - EnsureHeaderWeakFormat(&dylanweakfmt, arena); + die(EnsureHeaderFormat(&dylanfmt, arena), "EnsureHeaderFormat"); + die(EnsureHeaderWeakFormat(&dylanweakfmt, arena), "EnsureHeaderWeakFormat"); MPS_ARGS_BEGIN(args) { /* Ask the leafpool to allocate in the nursery, as we're using it to test weaknesss and want things to die in it promptly. */ diff --git a/mps/code/bttest.c b/mps/code/bttest.c index 12a6bd8503f..d84ed688496 100644 --- a/mps/code/bttest.c +++ b/mps/code/bttest.c @@ -125,7 +125,7 @@ static void get(void) { if (argInRange(0)) { Bool b = (BTGet)(bt, args[0]); - printf(b ? "TRUE\n" : "FALSE\n"); + puts(b ? "TRUE" : "FALSE"); } } @@ -148,7 +148,7 @@ static void isSetRange(void) { if (checkDefaultRange(0)) { Bool b = BTIsSetRange(bt, args[0], args[1]); - printf(b ? "TRUE\n" : "FALSE\n"); + puts(b ? "TRUE" : "FALSE"); } } @@ -157,7 +157,7 @@ static void isResRange(void) { if (checkDefaultRange(0)) { Bool b = BTIsResRange(bt, args[0], args[1]); - printf(b ? "TRUE\n" : "FALSE\n"); + puts(b ? "TRUE" : "FALSE"); } } @@ -325,7 +325,7 @@ static void showBT(void) { i = 0; while((i < btSize) && (i < 50)) { if (i % 10 == 0) - c = (char)((i / 10) % 10) + '0'; + c = (char)(((i / 10) % 10) + '0'); else c = ' '; putchar(c); @@ -334,7 +334,7 @@ static void showBT(void) { putchar('\n'); i = 0; while((i < btSize) && (i < 50)) { - c = (char)(i % 10) +'0'; + c = (char)((i % 10) +'0'); putchar(c); ++ i; } @@ -374,7 +374,7 @@ extern int main(int argc, char *argv[]) while(1) { char input[100]; printf("bt test> "); - fflush(stdout); + (void)fflush(stdout); if (fgets(input, 100, stdin)) { obeyCommand(input); showBT(); diff --git a/mps/code/commpost.nmk b/mps/code/commpost.nmk index 021e37b89e4..f8ed8380799 100644 --- a/mps/code/commpost.nmk +++ b/mps/code/commpost.nmk @@ -96,8 +96,8 @@ $(PFM)\cool\mps.lib: \ $(MPMOBJ) $(AMCOBJ) $(AMSOBJ) $(AWLOBJ) $(LOOBJ) $(SNCOBJ) \ $(MVFFOBJ) $(PLINTHOBJ) $(POOLNOBJ) $(ECHO) $@ - cl /c $(CFLAGS) /Fd$(PFM)\$(VARIETY)\ /Fo$(PFM)\$(VARIETY)\version.o version.c - $(LIBMAN) $(LIBFLAGS) /OUT:$@ $** $(PFM)\$(VARIETY)\version.o + $(CC) /c $(CFLAGS) /Fo$(PFM)\$(VARIETY)\version.obj version.c + $(LIBMAN) $(LIBFLAGS) /OUT:$@ $** $(PFM)\$(VARIETY)\version.obj # OTHER GENUINE TARGETS @@ -267,13 +267,13 @@ $(PFM)\$(VARIETY)\mpseventsql.obj: $(PFM)\$(VARIETY)\eventsql.obj $(ECHO) $@ @if not exist $(PFM) mkdir $(PFM) @if not exist $(PFM)\$(VARIETY) mkdir $(PFM)\$(VARIETY) - cl /c $(CFLAGS) /Fd$(PFM)\$(VARIETY)\ /Fo$@ $< + $(CC) /c $(CFLAGS) /Fo$@ $< $(PFM)\$(VARIETY)\sqlite3.obj: $(ECHO) $@ @if not exist $(PFM) mkdir $(PFM) @if not exist $(PFM)\$(VARIETY) mkdir $(PFM)\$(VARIETY) - cl /c $(CFLAGSSQL) /Fd$(PFM)\$(VARIETY)\ /Fo$@ sqlite3.c + $(CC) /c $(CFLAGSSQL) /Fo$@ sqlite3.c {}.asm{$(PFM)\$(VARIETY)}.obj: $(ECHO) $@ @@ -295,7 +295,7 @@ $(PFM)\$(VARIETY)\sqlite3.obj: {$(PFM)\$(VARIETY)}.obj{$(PFM)\$(VARIETY)}.exe: $(ECHO) $@ - $(LINKER) $(LINKFLAGS) /PDB:$*.pdb /OUT:$@ $(**) + $(LINKER) $(LINKFLAGS) /OUT:$@ $(**) # C. COPYRIGHT AND LICENSE diff --git a/mps/code/commpre.nmk b/mps/code/commpre.nmk index ec1685a8630..9edc9ef0937 100644 --- a/mps/code/commpre.nmk +++ b/mps/code/commpre.nmk @@ -219,20 +219,15 @@ ECHO = echo # C FLAGS -# /MD means compile for multi-threaded environment with separate C library DLL. -# /MT means compile for multi-threaded environment. -# /ML means compile for single-threaded environment. -# A 'd' at the end means compile for debugging. - CFLAGSTARGETPRE = CFLAGSTARGETPOST = -CRTFLAGSHOT = /MT -CRTFLAGSCOOL = /MTd -LINKFLAGSHOT = libcmt.lib -LINKFLAGSCOOL = libcmtd.lib +CRTFLAGSHOT = +CRTFLAGSCOOL = +LINKFLAGSHOT = +LINKFLAGSCOOL = CFLAGSSQLPRE = /nologo $(PFMDEFS) -CFLAGSCOMMONPRE = /nologo /W4 /WX $(PFMDEFS) $(CFLAGSTARGETPRE) +CFLAGSCOMMONPRE = /nologo $(PFMDEFS) $(CFLAGSTARGETPRE) CFLAGSSQLPOST = CFLAGSCOMMONPOST = $(CFLAGSTARGETPOST) @@ -247,7 +242,7 @@ CFLAGSHOT = /O2 /DNDEBUG # building a DLL, mpsdy.dll, the linker step will fail (error LNK2001: # unresolved external symbol __chkesp). See # http://support.microsoft.com/kb/q191669/ -CFLAGSCOOL = /Od +CFLAGSCOOL = CFLAGSINTERNAL = /Zi CFLAGSEXTERNAL = @@ -280,7 +275,7 @@ LFCOOL = $(LINKFLAGSCOOL) $(LINKFLAGSINTERNAL) # %%VARIETY: When adding a new variety, define a macro containing the flags # for the new variety LIBMAN = lib # can't call this LIB - it screws the environment -LIBFLAGSCOMMON = /nologo +LIBFLAGSCOMMON = LIBFLAGSRASH = LIBFLAGSHOT = diff --git a/mps/code/config.h b/mps/code/config.h index 4778b4b7552..0a1dc4a6a2e 100644 --- a/mps/code/config.h +++ b/mps/code/config.h @@ -172,7 +172,7 @@ /* "constant conditional" (MPS_END) */ #pragma warning(disable: 4127) -/* "unreachable code" (ASSERT, if cond is constantly true). */ +/* "unreachable code" (AVER, if cond is constantly true). */ #pragma warning(disable: 4702) /* "expression evaluates to a function which is missing an argument list" */ @@ -211,6 +211,17 @@ #endif /* MPS_BUILD_MV */ +/* Suppress Pelles C warnings at warning level 2 */ +/* Essentially the same settings are done in testlib.h. */ + +#ifdef MPS_BUILD_PC + +/* "Unreachable code" (AVER, if condition is constantly true). */ +#pragma warn(disable: 2154) + +#endif /* MPS_BUILD_PC */ + + /* EPVMDefaultSubsequentSegSIZE is a default for the alignment of * subsequent segments (non-initial at each save level) in EPVM. See * design.mps.poolepvm.arch.segment.size. diff --git a/mps/code/event.c b/mps/code/event.c index 374b55868f2..a650b63b958 100644 --- a/mps/code/event.c +++ b/mps/code/event.c @@ -419,7 +419,7 @@ void EventDump(mps_lib_FILE *stream) /* This can happen if there's a backtrace very early in the life of the MPS, and will cause an access violation if we continue. */ if (!eventInited) { - WriteF(stream, "No events\n", NULL); + (void)WriteF(stream, "No events\n", NULL); return; } diff --git a/mps/code/event.h b/mps/code/event.h index 3e1463527ba..11884d30d6c 100644 --- a/mps/code/event.h +++ b/mps/code/event.h @@ -87,7 +87,7 @@ extern Word EventKindControl; size = offsetof(Event##name##Struct, f1) + _string_len + sizeof('\0'); \ EVENT_BEGIN(name, size) \ _event->f0 = (p0); \ - mps_lib_memcpy(_event->f1, (string), _string_len); \ + (void)mps_lib_memcpy(_event->f1, (string), _string_len); \ _event->f1[_string_len] = '\0'; \ EVENT_END(name, size); \ END diff --git a/mps/code/eventcnv.c b/mps/code/eventcnv.c index 7cca6846a49..33375c45f4d 100644 --- a/mps/code/eventcnv.c +++ b/mps/code/eventcnv.c @@ -64,12 +64,12 @@ static const char *prog; /* program name */ static void fevwarn(const char *prefix, const char *format, va_list args) { - fflush(stdout); /* sync */ - fprintf(stderr, "%s: %s @", prog, prefix); - EVENT_CLOCK_PRINT(stderr, eventTime); - fprintf(stderr, " "); - vfprintf(stderr, format, args); - fprintf(stderr, "\n"); + (void)fflush(stdout); /* sync */ + (void)fprintf(stderr, "%s: %s @", prog, prefix); + (void)EVENT_CLOCK_PRINT(stderr, eventTime); + (void)fprintf(stderr, " "); + (void)vfprintf(stderr, format, args); + (void)fprintf(stderr, "\n"); } /* evwarn -- flush stdout, warn to stderr */ @@ -100,10 +100,9 @@ static void everror(const char *format, ...) static void usage(void) { - fprintf(stderr, - "Usage: %s [-f logfile] [-h]\n" - "See \"Telemetry\" in the reference manual for instructions.\n", - prog); + (void)fprintf(stderr, "Usage: %s [-f logfile] [-h]\n" + "See \"Telemetry\" in the reference manual for instructions.\n", + prog); } @@ -270,7 +269,7 @@ static void readLog(FILE *stream) break; } - EVENT_CLOCK_PRINT(stdout, eventTime); + (void)EVENT_CLOCK_PRINT(stdout, eventTime); printf(" %4X", (unsigned)code); switch (code) { @@ -286,7 +285,7 @@ static void readLog(FILE *stream) } putchar('\n'); - fflush(stdout); + (void)fflush(stdout); } /* while(!feof(input)) */ } diff --git a/mps/code/eventtxt.c b/mps/code/eventtxt.c index 3971d0e84da..4782e576a94 100644 --- a/mps/code/eventtxt.c +++ b/mps/code/eventtxt.c @@ -54,26 +54,24 @@ static void everror(const char *format, ...) { va_list args; - fflush(stdout); /* sync */ - fprintf(stderr, "%s: ", prog); + (void)fflush(stdout); /* sync */ + (void)fprintf(stderr, "%s: ", prog); va_start(args, format); - vfprintf(stderr, format, args); - fprintf(stderr, "\n"); + (void)vfprintf(stderr, format, args); + (void)fprintf(stderr, "\n"); va_end(args); exit(EXIT_FAILURE); } static void usage(void) { - fprintf(stderr, - "Usage: %s [-l ]\n", - prog); + (void)fprintf(stderr, "Usage: %s [-l ]\n", prog); } static void usageError(void) { - usage(); - everror("Bad usage"); + usage(); + everror("Bad usage"); } /* parseArgs -- parse command line arguments */ @@ -289,7 +287,7 @@ static void recordLabel(char *p) address = parseHex(&p); if (address > (Word)-1) { - printf("label address too large!"); + (void)printf("label address too large!"); return; } @@ -440,24 +438,27 @@ static void readLog(FILE *input) if ((major != EVENT_VERSION_MAJOR) || (median != EVENT_VERSION_MEDIAN) || (minor != EVENT_VERSION_MINOR)) { - fprintf(stderr, "Event log version does not match: %d.%d.%d vs %d.%d.%d\n", - (int)major, (int)median, (int)minor, - EVENT_VERSION_MAJOR, - EVENT_VERSION_MEDIAN, - EVENT_VERSION_MINOR); + (void)fprintf(stderr, "Event log version does not match: " + "%d.%d.%d vs %d.%d.%d\n", + (int)major, (int)median, (int)minor, + EVENT_VERSION_MAJOR, + EVENT_VERSION_MEDIAN, + EVENT_VERSION_MINOR); } if (maxCode > EventCodeMAX) { - fprintf(stderr, "Event log may contain unknown events with codes from %d to %d\n", - EventCodeMAX+1, (int)maxCode); + (void)fprintf(stderr, "Event log may contain unknown events " + "with codes from %d to %d\n", + EventCodeMAX+1, (int)maxCode); } if (wordWidth > MPS_WORD_WIDTH) { int newHexWordWidth = (int)((wordWidth + 3) / 4); if (newHexWordWidth > hexWordWidth) { - fprintf(stderr, - "Event log word width is greater than on current platform;" - "previous values may be printed too narrowly.\n"); + (void)fprintf(stderr, + "Event log word width is greater than on current " + "platform; previous values may be printed too " + "narrowly.\n"); } hexWordWidth = newHexWordWidth; } diff --git a/mps/code/exposet0.c b/mps/code/exposet0.c index 739ccac1e6a..a3eb7266e1a 100644 --- a/mps/code/exposet0.c +++ b/mps/code/exposet0.c @@ -231,7 +231,7 @@ static void *test(void *arg, size_t s) if (objs % 1024 == 0) { report(arena); putchar('.'); - fflush(stdout); + (void)fflush(stdout); } ++objs; diff --git a/mps/code/expt825.c b/mps/code/expt825.c index e18905061cf..8c8d1e79a3d 100644 --- a/mps/code/expt825.c +++ b/mps/code/expt825.c @@ -86,7 +86,7 @@ static void register_numbered_tree(mps_word_t tree, mps_arena_t arena) { /* don't finalize ints */ if ((tree & 1) == 0) { - mps_finalize(arena, (mps_addr_t *)&tree); + die(mps_finalize(arena, (mps_addr_t *)&tree), "mps_finalize"); register_numbered_tree(DYLAN_VECTOR_SLOT(tree, 0), arena); register_numbered_tree(DYLAN_VECTOR_SLOT(tree, 1), arena); } @@ -125,7 +125,7 @@ static void register_indirect_tree(mps_word_t tree, mps_arena_t arena) /* don't finalize ints */ if ((tree & 1) == 0) { mps_word_t indirect = DYLAN_VECTOR_SLOT(tree,2); - mps_finalize(arena, (mps_addr_t *)&indirect); + die(mps_finalize(arena, (mps_addr_t *)&indirect), "mps_finalize"); register_indirect_tree(DYLAN_VECTOR_SLOT(tree, 0), arena); register_indirect_tree(DYLAN_VECTOR_SLOT(tree, 1), arena); } @@ -186,7 +186,7 @@ static void *test(void *arg, size_t s) (mps_collections(arena) < collectionCOUNT)) { mps_word_t final_this_time = 0; printf("Collecting..."); - fflush(stdout); + (void)fflush(stdout); die(mps_arena_collect(arena), "collect"); printf(" Done.\n"); while (mps_message_poll(arena)) { @@ -227,7 +227,7 @@ static void *test(void *arg, size_t s) (mps_collections(arena) < collectionCOUNT)) { mps_word_t final_this_time = 0; printf("Collecting..."); - fflush(stdout); + (void)fflush(stdout); die(mps_arena_collect(arena), "collect"); printf(" Done.\n"); while (mps_message_poll(arena)) { diff --git a/mps/code/fbmtest.c b/mps/code/fbmtest.c index 905e90d0a93..e26c9f26224 100644 --- a/mps/code/fbmtest.c +++ b/mps/code/fbmtest.c @@ -83,13 +83,13 @@ static Index (indexOfAddr)(FBMState state, Addr a) static void describe(FBMState state) { switch (state->type) { case FBMTypeCBS: - CBSDescribe(state->the.cbs, mps_lib_get_stdout()); + die(CBSDescribe(state->the.cbs, mps_lib_get_stdout()), "CBSDescribe"); break; case FBMTypeFreelist: - FreelistDescribe(state->the.fl, mps_lib_get_stdout()); + die(FreelistDescribe(state->the.fl, mps_lib_get_stdout()), "FreelistDescribe"); break; default: - fail(); + cdie(0, "invalid state->type"); break; } } @@ -157,7 +157,7 @@ static void check(FBMState state) FreelistIterate(state->the.fl, checkFLCallback, (void *)&closure, 0); break; default: - fail(); + cdie(0, "invalid state->type"); return; } @@ -311,7 +311,7 @@ static void allocate(FBMState state, Addr base, Addr limit) res = FreelistDelete(&oldRange, state->the.fl, &range); break; default: - fail(); + cdie(0, "invalid state->type"); return; } @@ -387,7 +387,7 @@ static void deallocate(FBMState state, Addr base, Addr limit) res = FreelistInsert(&freeRange, state->the.fl, &range); break; default: - fail(); + cdie(0, "invalid state->type"); return; } @@ -467,7 +467,7 @@ static void find(FBMState state, Size size, Bool high, FindDelete findDelete) (&foundRange, &oldRange, state->the.fl, size * state->align, findDelete); break; default: - fail(); + cdie(0, "invalid state->type"); return; } @@ -538,7 +538,7 @@ static void test(FBMState state, unsigned n) { find(state, size, high, findDelete); break; default: - fail(); + cdie(0, "invalid state->type"); return; } if ((i + 1) % 1000 == 0) diff --git a/mps/code/finaltest.c b/mps/code/finaltest.c index 205cfefd5ad..a6c23aebfd1 100644 --- a/mps/code/finaltest.c +++ b/mps/code/finaltest.c @@ -77,7 +77,7 @@ static void register_numbered_tree(mps_word_t tree, mps_arena_t arena) /* don't finalize ints */ if ((tree & 1) == 0) { mps_addr_t tree_ref = (mps_addr_t)tree; - mps_finalize(arena, &tree_ref); + die(mps_finalize(arena, &tree_ref), "mps_finalize"); register_numbered_tree(DYLAN_VECTOR_SLOT(tree, 0), arena); register_numbered_tree(DYLAN_VECTOR_SLOT(tree, 1), arena); } @@ -117,7 +117,7 @@ static void register_indirect_tree(mps_word_t tree, mps_arena_t arena) if ((tree & 1) == 0) { mps_word_t indirect = DYLAN_VECTOR_SLOT(tree,2); mps_addr_t indirect_ref = (mps_addr_t)indirect; - mps_finalize(arena, &indirect_ref); + die(mps_finalize(arena, &indirect_ref), "mps_finalize"); register_indirect_tree(DYLAN_VECTOR_SLOT(tree, 0), arena); register_indirect_tree(DYLAN_VECTOR_SLOT(tree, 1), arena); } @@ -175,7 +175,7 @@ static void *test(void *arg, size_t s) (mps_collections(arena) < collectionCOUNT)) { mps_word_t final_this_time = 0; printf("Collecting..."); - fflush(stdout); + (void)fflush(stdout); die(mps_arena_collect(arena), "collect"); printf(" Done.\n"); while (mps_message_poll(arena)) { @@ -213,7 +213,7 @@ static void *test(void *arg, size_t s) (mps_collections(arena) < collectionCOUNT)) { mps_word_t final_this_time = 0; printf("Collecting..."); - fflush(stdout); + (void)fflush(stdout); die(mps_arena_collect(arena), "collect"); printf(" Done.\n"); while (mps_message_poll(arena)) { diff --git a/mps/code/fmtdy.c b/mps/code/fmtdy.c index f622bfe128c..498f8811635 100644 --- a/mps/code/fmtdy.c +++ b/mps/code/fmtdy.c @@ -470,8 +470,8 @@ extern mps_res_t dylan_scan1(mps_ss_t mps_ss, mps_addr_t *object_io) break; case 1: /* stretchy non-traceable */ - notreached(); /* Not used by DylanWorks yet */ p += vt + 1; + notreached(); /* Not used by DylanWorks yet */ break; case 2: /* non-stretchy traceable */ @@ -482,7 +482,6 @@ extern mps_res_t dylan_scan1(mps_ss_t mps_ss, mps_addr_t *object_io) break; case 3: /* stretchy traceable */ - notreached(); /* DW doesn't create them yet */ vl = *(mps_word_t *)p; /* vector length */ assert((vl & 3) == 1); /* check Dylan integer tag */ vl >>= 2; /* untag it */ @@ -490,6 +489,7 @@ extern mps_res_t dylan_scan1(mps_ss_t mps_ss, mps_addr_t *object_io) res = dylan_scan_contig(mps_ss, p, p + vl); if(res) return res; p += vt; /* skip to end of whole vector */ + notreached(); /* DW doesn't create them yet */ break; case 4: /* non-word */ @@ -500,11 +500,11 @@ extern mps_res_t dylan_scan1(mps_ss_t mps_ss, mps_addr_t *object_io) break; case 5: /* stretchy non-word */ - notreached(); /* DW doesn't create them yet */ es = (vh & 0xff) >> 3; vb = (vh >> 16) & 0xff; vt += vb; p += NONWORD_LENGTH(vt, es) + 1; + notreached(); /* DW doesn't create them yet */ break; default: diff --git a/mps/code/fotest.c b/mps/code/fotest.c index ada5f6dec67..4025d20a2c6 100644 --- a/mps/code/fotest.c +++ b/mps/code/fotest.c @@ -149,11 +149,6 @@ static mps_res_t stress(size_t (*size)(unsigned long, mps_align_t), } -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -#define alignUp(w, a) (((w) + (a) - 1) & ~((size_t)(a) - 1)) - - /* randomSizeAligned -- produce sizes both large and small, * aligned by platform alignment */ diff --git a/mps/code/locbwcss.c b/mps/code/locbwcss.c index 5807d9c1f7b..3bc674c7d68 100644 --- a/mps/code/locbwcss.c +++ b/mps/code/locbwcss.c @@ -131,8 +131,7 @@ static void allocMultiple(PoolStat stat) static void reportResults(PoolStat stat, const char *name) { - printf("\nResults for "); - fputs(name, stdout); + printf("\nResults for %s\n", name); printf("\n"); printf(" Allocated %"PRIuLONGEST" objects\n", (ulongest_t)stat->aCount); printf(" Freed %"PRIuLONGEST" objects\n", (ulongest_t)stat->fCount); diff --git a/mps/code/lockutw3.c b/mps/code/lockutw3.c index da5070ecab7..6ba288521c5 100644 --- a/mps/code/lockutw3.c +++ b/mps/code/lockutw3.c @@ -84,8 +84,10 @@ int main(int argc, char *argv[]) for(i = 0; i < nTHREADS; i++) t[i] = CreateThread(NULL, 0, thread0, NULL, 0, &id); - for(i = 0; i < nTHREADS; i++) - WaitForSingleObject(t[i], INFINITE); + for(i = 0; i < nTHREADS; i++) { + cdie(WaitForSingleObject(t[i], INFINITE) == WAIT_OBJECT_0, + "WaitForSingleObject"); + } Insist(shared == nTHREADS*COUNT); diff --git a/mps/code/locus.c b/mps/code/locus.c index 11220210f52..f0ba7415cde 100644 --- a/mps/code/locus.c +++ b/mps/code/locus.c @@ -43,7 +43,7 @@ SegPref SegPrefDefault(void) void SegPrefInit(SegPref pref) { - mps_lib_memcpy(pref, &segPrefDefault, sizeof(SegPrefStruct)); + (void)mps_lib_memcpy(pref, &segPrefDefault, sizeof(SegPrefStruct)); } diff --git a/mps/code/mpmss.c b/mps/code/mpmss.c index 76fbf12c3fe..b2a48347382 100644 --- a/mps/code/mpmss.c +++ b/mps/code/mpmss.c @@ -92,11 +92,6 @@ static mps_res_t stress(mps_class_t class, size_t (*size)(int i), } -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -#define alignUp(w, a) (((w) + (a) - 1) & ~((size_t)(a) - 1)) - - /* randomSize -- produce sizes both latge and small */ static size_t randomSize(int i) @@ -153,7 +148,7 @@ static mps_pool_debug_option_s fenceOptions = { /* testInArena -- test all the pool classes in the given arena */ -static int testInArena(mps_arena_t arena, mps_pool_debug_option_s *options) +static void testInArena(mps_arena_t arena, mps_pool_debug_option_s *options) { /* IWBN to test MVFFDebug, but the MPS doesn't support debugging */ /* cross-segment allocation (possibly MVFF ought not to). */ @@ -176,8 +171,6 @@ static int testInArena(mps_arena_t arena, mps_pool_debug_option_s *options) die(stress(mps_class_mv(), randomSize, arena, (size_t)65536, (size_t)32, (size_t)65536), "stress MV"); - - return 0; } diff --git a/mps/code/mps.c b/mps/code/mps.c index bcd6120de82..ce910bad927 100644 --- a/mps/code/mps.c +++ b/mps/code/mps.c @@ -194,8 +194,8 @@ #include "protw3.c" /* Windows protection */ #include "proti3.c" /* 32-bit Intel mutator context decoding */ #include "prmci3w3.c" /* Windows on 32-bit Intel mutator context */ -#include "ssw3i3mv.c" /* Windows on 32-bit stack scan for Microsoft C */ -#include "spw3i3mv.c" /* Windows on 32-bit stack probe for Microsoft C */ +#include "ssw3i3mv.c" /* Windows on 32-bit Intel stack scan for Microsoft C */ +#include "spw3i3.c" /* Windows on 32-bit Intel stack probe */ #include "mpsiw3.c" /* Windows interface layer extras */ /* Windows on 64-bit Intel with Microsoft Visual Studio */ @@ -210,8 +210,8 @@ #include "protw3.c" /* Windows protection */ #include "proti6.c" /* 64-bit Intel mutator context decoding */ #include "prmci6w3.c" /* Windows on 64-bit Intel mutator context */ -#include "ssw3i6mv.c" /* Windows on 64-bit stack scan for Microsoft C */ -#include "spw3i6mv.c" /* Windows on 64-bit stack probe for Microsoft C */ +#include "ssw3i6mv.c" /* Windows on 64-bit Intel stack scan for Microsoft C */ +#include "spw3i6.c" /* Windows on 64-bit Intel stack probe */ #include "mpsiw3.c" /* Windows interface layer extras */ /* Windows on 32-bit Intel with Pelles C */ @@ -226,7 +226,7 @@ #include "proti3.c" /* 32-bit Intel mutator context decoding */ #include "prmci3w3.c" /* Windows on 32-bit Intel mutator context */ #include "ssw3i3pc.c" /* Windows on 32-bit stack scan for Pelles C */ -#include "spw3i3mv.c" /* Intel stack probe */ +#include "spw3i3.c" /* 32-bit Intel stack probe */ #include "mpsiw3.c" /* Windows interface layer extras */ #else diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c index 1d52208be9a..38b8e62f56c 100644 --- a/mps/code/mpsi.c +++ b/mps/code/mpsi.c @@ -1737,12 +1737,12 @@ mps_word_t mps_telemetry_control(mps_word_t resetMask, mps_word_t flipMask) void mps_telemetry_set(mps_word_t setMask) { - EventControl((Word)setMask, (Word)setMask); + (void)EventControl((Word)setMask, (Word)setMask); } void mps_telemetry_reset(mps_word_t resetMask) { - EventControl((Word)resetMask, 0); + (void)EventControl((Word)resetMask, 0); } mps_word_t mps_telemetry_get(void) diff --git a/mps/code/mpsicv.c b/mps/code/mpsicv.c index 3f8d05b92e0..cba8a69f300 100644 --- a/mps/code/mpsicv.c +++ b/mps/code/mpsicv.c @@ -94,8 +94,6 @@ struct tlonglong { /* alignmentTest -- test default alignment is acceptable */ -#define max(a, b) (((a) > (b)) ? (a) : (b)) - static void alignmentTest(mps_arena_t arena) { mps_pool_t pool; @@ -404,7 +402,7 @@ static void *test(void *arg, size_t s) if (rnd() & 1) { printf("Using auto_header format.\n"); - EnsureHeaderFormat(&format, arena); + die(EnsureHeaderFormat(&format, arena), "EnsureHeaderFormat"); ap_headerSIZE = headerSIZE; /* from fmthe.h */ } else { printf("Using normal format (no implicit object header: client pointers point at start of storage).\n"); diff --git a/mps/code/mpsliban.c b/mps/code/mpsliban.c index e84b2aed00d..75a3d48d518 100644 --- a/mps/code/mpsliban.c +++ b/mps/code/mpsliban.c @@ -65,9 +65,9 @@ static void mps_lib_assert_fail_default(const char *file, unsigned line, const char *condition) { - fflush(stdout); /* synchronize */ - fprintf(stderr, "%s:%u: MPS ASSERTION FAILED: %s\n", file, line, condition); - fflush(stderr); /* make sure the message is output */ + (void)fflush(stdout); /* synchronize */ + (void)fprintf(stderr, "%s:%u: MPS ASSERTION FAILED: %s\n", file, line, condition); + (void)fflush(stderr); /* make sure the message is output */ ASSERT_ABORT(); /* see config.h */ } diff --git a/mps/code/mv.nmk b/mps/code/mv.nmk new file mode 100644 index 00000000000..e860552e793 --- /dev/null +++ b/mps/code/mv.nmk @@ -0,0 +1,74 @@ +# -*- makefile -*- +# +# mv.nmk: NMAKE FRAGMENT FOR MICROSOFT VISUAL C/C++ +# +# $Id: //info.ravenbrook.com/project/mps/branch/2014-03-21/pellesc/code/gc.gmk#1 $ +# Copyright (c) 2014 Ravenbrook Limited. See end of file for license. +# +# This file is included by platform nmake files that use the Microsoft +# Visual C/C+ compiler. It defines the compiler-specific variables +# that the common nmake file fragment () requires. + +CC = cl +LIBMAN = lib +LINKER = link + +# /Gs appears to be necessary to suppress stack checks. Stack checks +# (if not suppressed) generate a dependency on the C library, __chkesp, +# which causes the linker step to fail when building the DLL, mpsdy.dll. +CFLAGSCOMMONPRE = $(CFLAGSCOMMONPRE) /W4 /WX /Gs /Fd$(PFM)\$(VARIETY) +LIBFLAGSCOMMON = $(LIBFLAGSCOMMON) /nologo + +# /MD means compile for multi-threaded environment with separate C library DLL. +# /MT means compile for multi-threaded environment. +# /ML means compile for single-threaded environment. +# A 'd' at the end means compile for debugging. +CRTFLAGSHOT = $(CRTFLAGSHOT) /MT +CRTFLAGSCOOL = $(CRTFLAGSCOOL) /MTd + +CFLAGSCOOL = $(CFLAGSCOOL) /Od + +LINKFLAGSCOMMON = $(LINKFLAGSCOMMON) /PDB:$*.pdb +LINKFLAGSHOT = $(LINKFLAGSHOT) libcmt.lib +LINKFLAGSCOOL = $(LINKFLAGSCOOL) libcmtd.lib + + +# C. COPYRIGHT AND LICENSE +# +# Copyright (C) 2014 Ravenbrook Limited . +# All rights reserved. This is an open source license. Contact +# Ravenbrook for commercial licensing options. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Redistributions in any form must be accompanied by information on how +# to obtain complete source code for this software and any accompanying +# software that uses this software. The source code must either be +# included in the distribution or be available for no more than the cost +# of distribution plus a nominal fee, and must be freely redistributable +# under reasonable conditions. For an executable file, complete source +# code means the source code for all modules it contains. It does not +# include source code for modules or files that typically accompany the +# major components of the operating system on which the executable file +# runs. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +# PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mps/code/mv2test.c b/mps/code/mv2test.c index bc276abfc26..37435dfc7fd 100644 --- a/mps/code/mv2test.c +++ b/mps/code/mv2test.c @@ -38,11 +38,9 @@ static double expdev(void) } -#define max(a, b) (((a) > (b)) ? (a) : (b)) - -static size_t min; -static size_t mean; -static size_t max; +static size_t size_min; +static size_t size_mean; +static size_t size_max; static int verbose = 0; static mps_pool_t pool; @@ -50,8 +48,8 @@ static size_t randomSize(unsigned long i) { /* Distribution centered on mean. Verify that allocations below min and above max are handled correctly */ - size_t s = (max - mean)/4; - size_t m = mean; + size_t s = (size_max - size_mean)/4; + size_t m = size_mean; double r; double x; @@ -73,8 +71,6 @@ static size_t randomSize(unsigned long i) #define TEST_SET_SIZE 1234 #define TEST_LOOPS 27 -#define alignUp(w, a) (((w) + (a) - 1) & ~((size_t)(a) - 1)) - static mps_res_t make(mps_addr_t *p, mps_ap_t ap, size_t size) { mps_res_t res; @@ -182,14 +178,14 @@ static void stress_with_arena_class(mps_arena_class_t aclass, Bool zoned) "mps_arena_create"); } MPS_ARGS_END(args); - min = MPS_PF_ALIGN; - mean = 42; - max = 8192; + size_min = MPS_PF_ALIGN; + size_mean = 42; + size_max = 8192; MPS_ARGS_BEGIN(args) { - MPS_ARGS_ADD(args, MPS_KEY_MIN_SIZE, min); - MPS_ARGS_ADD(args, MPS_KEY_MEAN_SIZE, mean); - MPS_ARGS_ADD(args, MPS_KEY_MAX_SIZE, max); + MPS_ARGS_ADD(args, MPS_KEY_MIN_SIZE, size_min); + MPS_ARGS_ADD(args, MPS_KEY_MEAN_SIZE, size_mean); + MPS_ARGS_ADD(args, MPS_KEY_MAX_SIZE, size_max); MPS_ARGS_ADD(args, MPS_KEY_MVT_RESERVE_DEPTH, TEST_SET_SIZE/2); MPS_ARGS_ADD(args, MPS_KEY_MVT_FRAG_LIMIT, 0.3); die(stress(mps_class_mvt(), arena, randomSize, args), "stress MVT"); diff --git a/mps/code/pc.nmk b/mps/code/pc.nmk new file mode 100644 index 00000000000..80ce471c544 --- /dev/null +++ b/mps/code/pc.nmk @@ -0,0 +1,59 @@ +# -*- makefile -*- +# +# pc.nmk: NMAKE FRAGMENT FOR PELLES C +# +# $Id: //info.ravenbrook.com/project/mps/branch/2014-03-21/pellesc/code/gc.gmk#1 $ +# Copyright (c) 2014 Ravenbrook Limited. See end of file for license. +# +# This file is included by platform nmake files that use the Pelles C +# compiler. It defines the compiler-specific variables that the common +# nmake file fragment () requires. + +CC = pocc +LIBMAN = polib +LINKER = polink + +CFLAGSCOMMONPRE = $(CFLAGSCOMMONPRE) /Ze /W2 +CRTFLAGSHOT = /MT +CRTFLAGSCOOL = /MT + + +# C. COPYRIGHT AND LICENSE +# +# Copyright (C) 2014 Ravenbrook Limited . +# All rights reserved. This is an open source license. Contact +# Ravenbrook for commercial licensing options. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Redistributions in any form must be accompanied by information on how +# to obtain complete source code for this software and any accompanying +# software that uses this software. The source code must either be +# included in the distribution or be available for no more than the cost +# of distribution plus a nominal fee, and must be freely redistributable +# under reasonable conditions. For an executable file, complete source +# code means the source code for all modules it contains. It does not +# include source code for modules or files that typically accompany the +# major components of the operating system on which the executable file +# runs. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +# PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mps/code/poolmv2.c b/mps/code/poolmv2.c index 6910de5e065..d244fe23043 100644 --- a/mps/code/poolmv2.c +++ b/mps/code/poolmv2.c @@ -278,7 +278,9 @@ static Res MVTInit(Pool pool, ArgList args) if (res != ResOK) goto failABQ; - FreelistInit(MVTFreelist(mvt), align); + res = FreelistInit(MVTFreelist(mvt), align); + if (res != ResOK) + goto failABQ; pool->alignment = align; mvt->reuseSize = reuseSize; @@ -757,9 +759,11 @@ static Bool MVTDeleteOverlapping(Bool *deleteReturn, void *element, /* MVTReserve -- add a range to the available range queue, and if the - * queue is full, return segments to the arena. + * queue is full, return segments to the arena. Return TRUE if it + * succeeded in adding the range to the queue, FALSE if the queue + * overflowed. */ -static Res MVTReserve(MVT mvt, Range range) +static Bool MVTReserve(MVT mvt, Range range) { AVERT(MVT, mvt); AVERT(Range, range); @@ -774,18 +778,18 @@ static Res MVTReserve(MVT mvt, Range range) SURELY(ABQPeek(MVTABQ(mvt), &oldRange)); AVERT(Range, &oldRange); if (!MVTReturnSegs(mvt, &oldRange, arena)) - goto failOverflow; + goto overflow; METER_ACC(mvt->returns, RangeSize(&oldRange)); if (!ABQPush(MVTABQ(mvt), range)) - goto failOverflow; + goto overflow; } - return ResOK; + return TRUE; -failOverflow: +overflow: mvt->abqOverflow = TRUE; METER_ACC(mvt->overflows, RangeSize(range)); - return ResFAIL; + return FALSE; } @@ -820,7 +824,7 @@ static Res MVTInsert(MVT mvt, Addr base, Addr limit) * are coalesced on the ABQ. */ ABQIterate(MVTABQ(mvt), MVTDeleteOverlapping, &newRange, 0); - MVTReserve(mvt, &newRange); + (void)MVTReserve(mvt, &newRange); } return ResOK; @@ -875,11 +879,11 @@ static Res MVTDelete(MVT mvt, Addr base, Addr limit) */ RangeInit(&rangeLeft, RangeBase(&rangeOld), base); if (RangeSize(&rangeLeft) >= mvt->reuseSize) - MVTReserve(mvt, &rangeLeft); + (void)MVTReserve(mvt, &rangeLeft); RangeInit(&rangeRight, limit, RangeLimit(&rangeOld)); if (RangeSize(&rangeRight) >= mvt->reuseSize) - MVTReserve(mvt, &rangeRight); + (void)MVTReserve(mvt, &rangeRight); return ResOK; } @@ -1269,8 +1273,6 @@ static Bool MVTReturnSegs(MVT mvt, Range range, Arena arena) */ static Bool MVTRefillCallback(MVT mvt, Range range) { - Res res; - AVERT(ABQ, MVTABQ(mvt)); AVERT(Range, range); @@ -1278,11 +1280,7 @@ static Bool MVTRefillCallback(MVT mvt, Range range) return TRUE; METER_ACC(mvt->refillPushes, ABQDepth(MVTABQ(mvt))); - res = MVTReserve(mvt, range); - if (res != ResOK) - return FALSE; - - return TRUE; + return MVTReserve(mvt, range); } static Bool MVTCBSRefillCallback(CBS cbs, Range range, diff --git a/mps/code/protw3.c b/mps/code/protw3.c index 37d886644f6..43e0522c074 100644 --- a/mps/code/protw3.c +++ b/mps/code/protw3.c @@ -109,11 +109,13 @@ LONG WINAPI ProtSEHfilter(LPEXCEPTION_POINTERS info) void ProtSetup(void) { + void *handler; /* See "AddVectoredExceptionHandler function (Windows)" */ /* ProtSetup is called only once per process, not once per arena, so this exception handler is only installed once. */ - AddVectoredExceptionHandler(1uL, ProtSEHfilter); + handler = AddVectoredExceptionHandler(1uL, ProtSEHfilter); + AVER(handler != NULL); } diff --git a/mps/code/qs.c b/mps/code/qs.c index 40e290dceec..2e573d0840b 100644 --- a/mps/code/qs.c +++ b/mps/code/qs.c @@ -318,15 +318,14 @@ static void validate(void) for(i = 0; i < listl; ++i) { cdie(((QSCell)reg[1])->tag == QSInt, "validate int"); if((mps_word_t)((QSCell)reg[1])->value != list[i]) { - fprintf(stdout, - "mps_res_t: Element %"PRIuLONGEST" of the two lists do not match.\n", - (ulongest_t)i); + (void)fprintf(stdout, "mps_res_t: Element %"PRIuLONGEST" of the " + "two lists do not match.\n", (ulongest_t)i); return; } reg[1] = (mps_addr_t)((QSCell)reg[1])->tail; } cdie(reg[1] == (mps_word_t)0, "validate end"); - fprintf(stdout, "Note: Lists compare equal.\n"); + (void)fprintf(stdout, "Note: Lists compare equal.\n"); } diff --git a/mps/code/sacss.c b/mps/code/sacss.c index a5fc3734029..d48b41708d8 100644 --- a/mps/code/sacss.c +++ b/mps/code/sacss.c @@ -125,9 +125,6 @@ static mps_res_t stress(mps_class_t class, } -#define max(a, b) (((a) > (b)) ? (a) : (b)) - - /* randomSize8 -- produce sizes both latge and small */ static size_t randomSize8(int i) @@ -163,7 +160,7 @@ static mps_sac_classes_s classes8[4] = { {8, 1, 1}, {16, 1, 2}, {136, 9, 5}, static mps_sac_classes_s classes16[4] = { {16, 1, 1}, {32, 1, 2}, {144, 9, 5}, {topClassSIZE, 9, 4} }; -static int testInArena(mps_arena_t arena) +static void testInArena(mps_arena_t arena) { mps_pool_debug_option_s *debugOptions; mps_sac_classes_s *classes; @@ -183,7 +180,6 @@ static int testInArena(mps_arena_t arena) die(stress(mps_class_mv(), classCOUNT, classes, randomSize8, arena, (size_t)65536, (size_t)32, (size_t)65536), "stress MV"); - return 0; } diff --git a/mps/code/segsmss.c b/mps/code/segsmss.c index 06c6b7c01fb..ed25bf305ee 100644 --- a/mps/code/segsmss.c +++ b/mps/code/segsmss.c @@ -33,8 +33,8 @@ /* Forward declarations */ -static SegClass AMSTSegClassGet(void); -static PoolClass AMSTPoolClassGet(void); +extern SegClass AMSTSegClassGet(void); +extern PoolClass AMSTPoolClassGet(void); /* Start by defining the AMST pool (AMS Test pool) */ @@ -789,7 +789,7 @@ static void *test(void *arg, size_t s) &ambigRoots[0], ambigRootsCOUNT), "root_create_table(ambig)"); - fputs(indent, stdout); + (void)fputs(indent, stdout); /* create an ap, and leave it busy */ die(mps_reserve(&busy_init, busy_ap, 64), "mps_reserve busy"); @@ -801,7 +801,7 @@ static void *test(void *arg, size_t s) printf("\nSize %"PRIuLONGEST" bytes, %"PRIuLONGEST" objects.\n", (ulongest_t)totalSize, (ulongest_t)objs); printf("%s", indent); - fflush(stdout); + (void)fflush(stdout); for(i = 0; i < exactRootsCOUNT; ++i) cdie(exactRoots[i] == objNULL || dylan_check(exactRoots[i]), "all roots check"); @@ -832,7 +832,7 @@ static void *test(void *arg, size_t s) ++objs; if (objs % 256 == 0) { printf("."); - fflush(stdout); + (void)fflush(stdout); } } diff --git a/mps/code/splay.c b/mps/code/splay.c index 9e2be1e98ad..53e21db9fa8 100644 --- a/mps/code/splay.c +++ b/mps/code/splay.c @@ -800,7 +800,7 @@ Bool SplayTreeDelete(SplayTree splay, Tree node) { TreeClearRight(node); SplayTreeSetRoot(splay, TreeLeft(node)); TreeClearLeft(node); - SplaySplay(splay, NULL, compareGreater); + (void)SplaySplay(splay, NULL, compareGreater); leftLast = SplayTreeRoot(splay); AVER(leftLast != TreeEMPTY); AVER(!TreeHasRight(leftLast)); @@ -856,7 +856,7 @@ static Tree SplayTreeSuccessor(SplayTree splay) { /* temporarily chop off the left half-tree, inclusive of root */ SplayTreeSetRoot(splay, TreeRight(oldRoot)); TreeSetRight(oldRoot, TreeEMPTY); - SplaySplay(splay, NULL, compareLess); + (void)SplaySplay(splay, NULL, compareLess); newRoot = SplayTreeRoot(splay); AVER(newRoot != TreeEMPTY); AVER(TreeLeft(newRoot) == TreeEMPTY); @@ -968,7 +968,7 @@ Tree SplayTreeFirst(SplayTree splay) { if (SplayTreeIsEmpty(splay)) return TreeEMPTY; - SplaySplay(splay, NULL, compareLess); + (void)SplaySplay(splay, NULL, compareLess); node = SplayTreeRoot(splay); AVER(node != TreeEMPTY); AVER(TreeLeft(node) == TreeEMPTY); diff --git a/mps/code/spw3i3mv.c b/mps/code/spw3i3.c similarity index 94% rename from mps/code/spw3i3mv.c rename to mps/code/spw3i3.c index 3bb8ce94d0f..1439d069c40 100644 --- a/mps/code/spw3i3mv.c +++ b/mps/code/spw3i3.c @@ -1,4 +1,4 @@ -/* spw3i3mv.c: STACK PROBE FOR 32-BIT WINDOWS +/* spw3i3.c: STACK PROBE FOR 32-BIT WINDOWS * * $Id$ * Copyright (c) 2001-2014 Ravenbrook Limited. See end of file for license. @@ -13,6 +13,13 @@ #include "mpm.h" +#ifdef MPS_BUILD_PC + +/* "[ISO] Inline assembly code is not portable." */ +#pragma warn(disable: 2007) + +#endif /* MPS_BUILD_PC */ + void StackProbe(Size depth) { diff --git a/mps/code/spw3i6mv.c b/mps/code/spw3i6.c similarity index 98% rename from mps/code/spw3i6mv.c rename to mps/code/spw3i6.c index 751e9680e4b..2c9ee5de389 100644 --- a/mps/code/spw3i6mv.c +++ b/mps/code/spw3i6.c @@ -1,4 +1,4 @@ -/* spw3i6mv.c: STACK PROBE FOR 64-BIT WINDOWS +/* spw3i6.c: STACK PROBE FOR 64-BIT WINDOWS * * $Id$ * Copyright (c) 2013 Ravenbrook Limited. See end of file for license. diff --git a/mps/code/steptest.c b/mps/code/steptest.c index 73cc730b790..b6e08995125 100644 --- a/mps/code/steptest.c +++ b/mps/code/steptest.c @@ -109,7 +109,8 @@ static double my_clock(void) { FILETIME ctime, etime, ktime, utime; double dk, du; - GetProcessTimes(currentProcess, &ctime, &etime, &ktime, &utime); + cdie(GetProcessTimes(currentProcess, &ctime, &etime, &ktime, &utime) != 0, + "GetProcessTimes"); dk = ktime.dwHighDateTime * 4096.0 * 1024.0 * 1024.0 + ktime.dwLowDateTime; dk /= 10.0; @@ -391,7 +392,7 @@ static void *test(void *arg, size_t s) if (collections > old_collections) { old_collections = collections; putchar('.'); - fflush(stdout); + (void)fflush(stdout); } } diff --git a/mps/code/teletest.c b/mps/code/teletest.c index 17002585133..1e0dca6a53e 100644 --- a/mps/code/teletest.c +++ b/mps/code/teletest.c @@ -209,13 +209,14 @@ extern int main(int argc, char *argv[]) while(1) { char input[INPUT_BUFFER_SIZE]; printf("telemetry test> "); - fflush(stdout); + (void)fflush(stdout); if (fgets(input, INPUT_BUFFER_SIZE , stdin)) { obeyCommand(input); } else { - doQuit(); + break; } } + doQuit(); return EXIT_SUCCESS; } diff --git a/mps/code/testlib.c b/mps/code/testlib.c index 8ef14ca3c78..d4cf0afc0f2 100644 --- a/mps/code/testlib.c +++ b/mps/code/testlib.c @@ -122,7 +122,7 @@ static unsigned long seed_verify_float = 1; static unsigned long rnd_verify_float(void) { double s; - s = seed_verify_float; + s = (double)seed_verify_float; s *= R_a_float; s = fmod(s, R_m_float); seed_verify_float = (unsigned long)s; @@ -285,7 +285,7 @@ void randomize(int argc, char *argv[]) argv[0], seed0); rnd_state_set(seed0); } - fflush(stdout); /* ensure seed is not lost in case of failure */ + (void)fflush(stdout); /* ensure seed is not lost in case of failure */ } unsigned long rnd_state(void) @@ -341,10 +341,10 @@ _mps_RES_ENUM(RES_STRINGS_ROW, X) void verror(const char *format, va_list args) { - fflush(stdout); /* synchronize */ - vfprintf(stderr, format, args); - fprintf(stderr, "\n"); - fflush(stderr); /* make sure the message is output */ + (void)fflush(stdout); /* synchronize */ + (void)vfprintf(stderr, format, args); + (void)fprintf(stderr, "\n"); + (void)fflush(stderr); /* make sure the message is output */ /* On Windows, the abort signal pops up a dialog box. This suspends * the test suite until a button is pressed, which is not acceptable * for offline testing, so if the MPS_TESTLIB_NOABORT environment @@ -413,7 +413,7 @@ void assert_die(const char *file, unsigned line, const char *condition) void testlib_init(int argc, char *argv[]) { - mps_lib_assert_fail_install(assert_die); + (void)mps_lib_assert_fail_install(assert_die); randomize(argc, argv); } diff --git a/mps/code/testlib.h b/mps/code/testlib.h index d36f26a275c..aff3c108351 100644 --- a/mps/code/testlib.h +++ b/mps/code/testlib.h @@ -69,6 +69,20 @@ #endif /* MPS_BUILD_MV */ +/* Suppress Pelles C warnings at warning level 2 */ +/* Some of these are also done in config.h. */ + +#ifdef MPS_BUILD_PC + +/* "Structured Exception Handling is not portable." (mps_tramp). */ +#pragma warn(disable: 2008) + +/* "Unreachable code" (AVER, if condition is constantly true). */ +#pragma warn(disable: 2154) + +#endif /* MPS_BUILD_PC */ + + /* ulongest_t -- longest unsigned integer type * * Define a longest unsigned integer type for testing, scanning, and @@ -119,6 +133,20 @@ typedef long longest_t; #define testlib_unused(v) ((void)(v)) +/* max -- return larger value + * + * Note: evaluates its arguments twice. + */ + +#undef max +#define max(a, b) (((a) > (b)) ? (a) : (b)) + + +/* alignUp -- align word to alignment */ + +#define alignUp(w, a) (((w) + (a) - 1) & ~((size_t)(a) - 1)) + + /* die -- succeed or die * * If the first argument is not ResOK then prints the second diff --git a/mps/code/w3i3mv.nmk b/mps/code/w3i3mv.nmk index 9bea83c3a25..afe2f9128bd 100644 --- a/mps/code/w3i3mv.nmk +++ b/mps/code/w3i3mv.nmk @@ -5,16 +5,13 @@ PFM = w3i3mv -# /Gs appears to be necessary to suppress stack checks. Stack checks -# (if not suppressed) generate a dependency on the C library, __chkesp, -# which causes the linker step to fail when building the DLL, mpsdy.dll. -PFMDEFS = /DCONFIG_PF_STRING="w3i3mv" /DCONFIG_PF_W3I3MV \ - /DWIN32 /D_WINDOWS /Gs +PFMDEFS = /DCONFIG_PF_STRING="w3i3mv" /DCONFIG_PF_W3I3MV /DWIN32 /D_WINDOWS !INCLUDE commpre.nmk +!INCLUDE mv.nmk # MPM sources: core plus platform-specific. -MPM = $(MPMCOMMON) +MPM = $(MPMCOMMON) diff --git a/mps/code/w3i3pc.gmk b/mps/code/w3i3pc.gmk deleted file mode 100644 index e1b832be7a2..00000000000 --- a/mps/code/w3i3pc.gmk +++ /dev/null @@ -1,5 +0,0 @@ -%.obj: %.c - pocc /Ze $< - -amcss.exe: amcss.obj abq.obj arena.obj arenacl.obj arenavm.obj arg.obj boot.obj bt.obj buffer.obj cbs.obj dbgpool.obj dbgpooli.obj event.obj fmtdy.obj fmtdy.obj fmtdytst.obj fmthe.obj fmtno.obj fmtno.obj format.obj freelist.obj global.obj ld.obj lockw3.obj locus.obj message.obj meter.obj mpm.obj mpsi.obj mpsioan.obj mpsiw3.obj mpsliban.obj pool.obj poolabs.obj poolamc.obj poolams.obj poolamsi.obj poolawl.obj poollo.obj poolmfs.obj poolmrg.obj poolmv2.obj poolmv.obj poolmvff.obj pooln.obj poolsnc.obj proti3.obj prmci3w3.obj protocol.obj protw3.obj range.obj ref.obj reserv.obj ring.obj root.obj sa.obj sac.obj seg.obj shield.obj spw3i3mv.obj splay.obj ss.obj ssw3i3pc.obj table.obj testlib.obj thw3.obj thw3i3.obj trace.obj traceanc.obj tract.obj tree.obj version.obj vmw3.obj walk.obj - polink $^ /OUT:$@ diff --git a/mps/code/w3i3pc.nmk b/mps/code/w3i3pc.nmk new file mode 100644 index 00000000000..bc428bc86a8 --- /dev/null +++ b/mps/code/w3i3pc.nmk @@ -0,0 +1,171 @@ +# w3i3pc.nmk: WINDOWS (IA-32) NMAKE FILE -*- makefile -*- +# +# $Id: //info.ravenbrook.com/project/mps/branch/2014-03-21/pellesc/code/w3i3pc.nmk#1 $ +# Copyright (c) 2001-2014 Ravenbrook Limited. See end of file for license. + +PFM = w3i3pc + +# /Gs appears to be necessary to suppress stack checks. Stack checks +# (if not suppressed) generate a dependency on the C library, __chkesp, +# which causes the linker step to fail when building the DLL, mpsdy.dll. +PFMDEFS = /DCONFIG_PF_STRING="w3i3pc" /DCONFIG_PF_W3I3PC /DWIN32 /D_WINDOWS + +!INCLUDE commpre.nmk +!INCLUDE pc.nmk + +# MPM sources: core plus platform-specific. +MPM = $(MPMCOMMON) + + + +# Source to object file mappings and CFLAGS amalgamation +# +# %%VARIETY %%PART: When adding a new variety or part, add new macros which +# expand to the files included in the part for each variety +# +# %%VARIETY: When adding a new variety, add a CFLAGS macro which expands to +# the flags that that variety should use when compiling C. And a LINKFLAGS +# macro which expands to the flags that the variety should use when building +# executables. And a LIBFLAGS macro which expands to the flags that the +# variety should use when building libraries + +!IF "$(VARIETY)" == "hot" +CFLAGS=$(CFLAGSCOMMONPRE) $(CFHOT) $(CFLAGSCOMMONPOST) +CFLAGSSQL=$(CFLAGSSQLPRE) $(CFHOT) $(CFLAGSSQLPOST) +LINKFLAGS=$(LINKFLAGSCOMMON) $(LFHOT) +LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSHOT) +MPMOBJ0 = $(MPM:<=w3i3pc\hot\) +PLINTHOBJ0 = $(PLINTH:<=w3i3pc\hot\) +AMSOBJ0 = $(AMS:<=w3i3pc\hot\) +AMCOBJ0 = $(AMC:<=w3i3pc\hot\) +AWLOBJ0 = $(AWL:<=w3i3pc\hot\) +LOOBJ0 = $(LO:<=w3i3pc\hot\) +SNCOBJ0 = $(SNC:<=w3i3pc\hot\) +MVFFOBJ0 = $(MVFF:<=w3i3pc\hot\) +DWOBJ0 = $(DW:<=w3i3pc\hot\) +FMTTESTOBJ0 = $(FMTTEST:<=w3i3pc\hot\) +POOLNOBJ0 = $(POOLN:<=w3i3pc\hot\) +TESTLIBOBJ0 = $(TESTLIB:<=w3i3pc\hot\) + +!ELSEIF "$(VARIETY)" == "cool" +CFLAGS=$(CFLAGSCOMMONPRE) $(CFCOOL) $(CFLAGSCOMMONPOST) +CFLAGSSQL=$(CFLAGSSQLPRE) $(CFCOOL) $(CFLAGSSQLPOST) +LINKFLAGS=$(LINKFLAGSCOMMON) $(LFCOOL) +LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSCOOL) +MPMOBJ0 = $(MPM:<=w3i3pc\cool\) +PLINTHOBJ0 = $(PLINTH:<=w3i3pc\cool\) +AMSOBJ0 = $(AMS:<=w3i3pc\cool\) +AMCOBJ0 = $(AMC:<=w3i3pc\cool\) +AWLOBJ0 = $(AWL:<=w3i3pc\cool\) +LOOBJ0 = $(LO:<=w3i3pc\cool\) +SNCOBJ0 = $(SNC:<=w3i3pc\cool\) +MVFFOBJ0 = $(MVFF:<=w3i3pc\cool\) +DWOBJ0 = $(DW:<=w3i3pc\cool\) +FMTTESTOBJ0 = $(FMTTEST:<=w3i3pc\cool\) +POOLNOBJ0 = $(POOLN:<=w3i3pc\cool\) +TESTLIBOBJ0 = $(TESTLIB:<=w3i3pc\cool\) + +!ELSEIF "$(VARIETY)" == "rash" +CFLAGS=$(CFLAGSCOMMONPRE) $(CFRASH) $(CFLAGSCOMMONPOST) +CFLAGSSQL=$(CFLAGSSQLPRE) $(CFRASH) $(CFLAGSSQLPOST) +LINKFLAGS=$(LINKFLAGSCOMMON) $(LFRASH) +LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSRASH) +MPMOBJ0 = $(MPM:<=w3i3pc\rash\) +PLINTHOBJ0 = $(PLINTH:<=w3i3pc\rash\) +AMSOBJ0 = $(AMS:<=w3i3pc\rash\) +AMCOBJ0 = $(AMC:<=w3i3pc\rash\) +AWLOBJ0 = $(AWL:<=w3i3pc\rash\) +LOOBJ0 = $(LO:<=w3i3pc\rash\) +SNCOBJ0 = $(SNC:<=w3i3pc\rash\) +MVFFOBJ0 = $(MVFF:<=w3i3pc\rash\) +DWOBJ0 = $(DW:<=w3i3pc\rash\) +FMTTESTOBJ0 = $(FMTTEST:<=w3i3pc\rash\) +POOLNOBJ0 = $(POOLN:<=w3i3pc\rash\) +TESTLIBOBJ0 = $(TESTLIB:<=w3i3pc\rash\) + +#!ELSEIF "$(VARIETY)" == "cv" +#CFLAGS=$(CFLAGSCOMMON) $(CFCV) +#LINKFLAGS=$(LINKFLAGSCOMMON) $(LFCV) +#LIBFLAGS=$(LIBFLAGSCOMMON) $(LIBFLAGSCV) +#MPMOBJ0 = $(MPM:<=w3i3pc\cv\) +#MPMOBJ = $(MPMOBJ0:>=.obj) +#PLINTHOBJ0 = $(PLINTH:<=w3i3pc\cv\) +#PLINTHOBJ = $(PLINTHOBJ0:>=.obj) +#AMSOBJ0 = $(AMS:<=w3i3pc\cv\) +#AMSOBJ = $(AMSOBJ0:>=.obj) +#AMCOBJ0 = $(AMC:<=w3i3pc\cv\) +#AMCOBJ = $(AMCOBJ0:>=.obj) +#AWLOBJ0 = $(AWL:<=w3i3pc\cv\) +#AWLOBJ = $(AWLOBJ0:>=.obj) +#LOOBJ0 = $(LO:<=w3i3pc\cv\) +#LOOBJ = $(LOOBJ0:>=.obj) +#SNCOBJ0 = $(SNC:<=w3i3pc\cv\) +#SNCOBJ = $(SNCOBJ0:>=.obj) +#DWOBJ0 = $(DW:<=w3i3pc\cv\) +#DWOBJ = $(DWOBJ0:>=.obj) +#POOLNOBJ0 = $(POOLN:<=w3i3pc\cv\) +#POOLNOBJ = $(POOLNOBJ0:>=.obj) +#TESTLIBOBJ0 = $(TESTLIB:<=w3i3pc\cv\) +#TESTLIBOBJ = $(TESTLIBOBJ0:>=.obj) + +!ENDIF + +# %%PART: When adding a new part, add new macros which expand to the object +# files included in the part + +MPMOBJ = $(MPMOBJ0:>=.obj) +PLINTHOBJ = $(PLINTHOBJ0:>=.obj) +AMSOBJ = $(AMSOBJ0:>=.obj) +AMCOBJ = $(AMCOBJ0:>=.obj) +AWLOBJ = $(AWLOBJ0:>=.obj) +LOOBJ = $(LOOBJ0:>=.obj) +SNCOBJ = $(SNCOBJ0:>=.obj) +MVFFOBJ = $(MVFFOBJ0:>=.obj) +DWOBJ = $(DWOBJ0:>=.obj) +FMTTESTOBJ = $(FMTTESTOBJ0:>=.obj) +POOLNOBJ = $(POOLNOBJ0:>=.obj) +TESTLIBOBJ = $(TESTLIBOBJ0:>=.obj) + + +!INCLUDE commpost.nmk + + +# C. COPYRIGHT AND LICENSE +# +# Copyright (C) 2001-2014 Ravenbrook Limited . +# All rights reserved. This is an open source license. Contact +# Ravenbrook for commercial licensing options. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Redistributions in any form must be accompanied by information on how +# to obtain complete source code for this software and any accompanying +# software that uses this software. The source code must either be +# included in the distribution or be available for no more than the cost +# of distribution plus a nominal fee, and must be freely redistributable +# under reasonable conditions. For an executable file, complete source +# code means the source code for all modules it contains. It does not +# include source code for modules or files that typically accompany the +# major components of the operating system on which the executable file +# runs. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +# PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mps/code/w3i6mv.nmk b/mps/code/w3i6mv.nmk index 2a4769a665f..4d69f6d4a65 100644 --- a/mps/code/w3i6mv.nmk +++ b/mps/code/w3i6mv.nmk @@ -5,15 +5,11 @@ PFM = w3i6mv -# /Gs appears to be necessary to suppress stack checks. Stack checks -# (if not suppressed) generate a dependency on the C library, __chkesp, -# which causes the linker step to fail when building the DLL, mpsdy.dll. -PFMDEFS = /DCONFIG_PF_STRING="w3i6mv" /DCONFIG_PF_W3I6MV \ - /DWIN32 /D_WINDOWS /Gs +PFMDEFS = /DCONFIG_PF_STRING="w3i6mv" /DCONFIG_PF_W3I6MV /DWIN32 /D_WINDOWS MASM = ml64 # MPM sources: core plus platform-specific. -MPM = $(MPMCOMMON) +MPM = $(MPMCOMMON) !INCLUDE commpre.nmk diff --git a/mps/code/walk.c b/mps/code/walk.c index b17540e4954..d08fd160eec 100644 --- a/mps/code/walk.c +++ b/mps/code/walk.c @@ -308,7 +308,8 @@ static Res ArenaRootsWalk(Globals arenaGlobals, mps_roots_stepper_t f, if (SegFirst(&seg, arena)) { do { if ((SegPool(seg)->class->attr & AttrGC) != 0) { - TraceAddWhite(trace, seg); + res = TraceAddWhite(trace, seg); + AVER(res == ResOK); } } while (SegNext(&seg, arena, seg)); } diff --git a/mps/code/zcoll.c b/mps/code/zcoll.c index 639a323957a..9f8701ca1f5 100644 --- a/mps/code/zcoll.c +++ b/mps/code/zcoll.c @@ -119,12 +119,11 @@ static void showStatsAscii(size_t notcon, size_t con, size_t live, size_t alimit count = (a < 200) ? a + 1 : c; for(i = 0; i < count; i++) { - printf( (i == a) ? "A" - : (i < n) ? "n" - : (i < l) ? "L" - : (i < c) ? "_" - : " " - ); + putchar((i == a) ? 'A' + : (i < n) ? 'n' + : (i < l) ? 'L' + : (i < c) ? '_' + : ' '); } printf("\n"); } @@ -370,7 +369,7 @@ static void CatalogDo(mps_arena_t arena, mps_ap_t ap) myrootExact[CatalogRootIndex] = Catalog; get(arena); - fflush(stdout); + (void)fflush(stdout); CatalogCheck(); for(i = 0; i < CatalogVar; i += 1) { @@ -383,7 +382,7 @@ static void CatalogDo(mps_arena_t arena, mps_ap_t ap) get(arena); printf("Page %d: make articles\n", i); - fflush(stdout); + (void)fflush(stdout); for(j = 0; j < PageVar; j += 1) { die(make_dylan_vector(&v, ap, ArtFix + ArtVar), "Art"); @@ -405,7 +404,7 @@ static void CatalogDo(mps_arena_t arena, mps_ap_t ap) } } } - fflush(stdout); + (void)fflush(stdout); CatalogCheck(); } @@ -625,7 +624,7 @@ static void testscriptC(mps_arena_t arena, mps_ap_t ap, const char *script) script += sb; printf(" Collect\n"); stackwipe(); - mps_arena_collect(arena); + die(mps_arena_collect(arena), "mps_arena_collect"); mps_arena_release(arena); break; } diff --git a/mps/code/zmess.c b/mps/code/zmess.c index 1c87ac56cf2..e032b3f7620 100644 --- a/mps/code/zmess.c +++ b/mps/code/zmess.c @@ -242,7 +242,7 @@ static void testscriptC(mps_arena_t arena, const char *script) } case 'C': { printf(" Collect\n"); - mps_arena_collect(arena); + die(mps_arena_collect(arena), "mps_arena_collect"); break; } case 'F': { diff --git a/mps/tool/testrun.bat b/mps/tool/testrun.bat index 8bd44952bcd..88ad0779dff 100755 --- a/mps/tool/testrun.bat +++ b/mps/tool/testrun.bat @@ -59,9 +59,9 @@ set TEST_COUNT=0 set PASS_COUNT=0 set FAIL_COUNT=0 set SEPARATOR=---------------------------------------- -set LOGDIR=%TMP%\mps-%VARIETY%-log +set LOGDIR=%TMP%\mps-%PFM%-%VARIETY%-log echo Logging test output to %LOGDIR% -rmdir /q /s %LOGDIR% +rmdir /q /s %LOGDIR% 2> NUL mkdir %LOGDIR% if "%1"=="" call :run_tests %ALL_TEST_CASES%