diff options
author | Michael Panzlaff <michael.panzlaff@fau.de> | 2020-05-09 14:49:51 +0200 |
---|---|---|
committer | Michael Panzlaff <michael.panzlaff@fau.de> | 2020-07-05 18:09:59 +0200 |
commit | 3264cf697f5fe996c2a79c6c34181c186fe2f96e (patch) | |
tree | 919e94607188da2a6e561f41dfba39e3a7558b24 /src/fieldmap.c | |
parent | 46f4a4bbf7239743c333cd32d30b74a7b3176acc (diff) |
fix aggressive loop optimizations
Previously, aggressive loop optimizations with a new compiler were not
possible due to undefined behaviour at end of arrays.
A macro "UBFIX" is added to allow ifdefs for fixes which resolve
undefined behavior. For example newer GCC versions will detect various
bugs in the original game code and will otherwise not compile with -Werror.
Diffstat (limited to 'src/fieldmap.c')
-rw-r--r-- | src/fieldmap.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/fieldmap.c b/src/fieldmap.c index e953e0f93..25157ebb1 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -533,9 +533,16 @@ static bool32 SavedMapViewIsEmpty(void) u16 i; u32 marker = 0; +#ifndef UBFIX // BUG: This loop extends past the bounds of the mapView array. Its size is only 0x100. for (i = 0; i < 0x200; i++) marker |= gSaveBlock1Ptr->mapView[i]; +#else + // UBFIX: Only iterate over 0x100 + for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->mapView); i++) + marker |= gSaveBlock1Ptr->mapView[i]; +#endif + if (marker == 0) return TRUE; |