[PATCH] statistics.c: Fix a potential compiler bug triggered in gcc 3.4.5

Lubomir I. Ivanov neolit123 at gmail.com
Sat Feb 23 08:33:13 PST 2013


From: "Lubomir I. Ivanov" <neolit123 at gmail.com>

This may look as a simple formatting change and won't make much sense
to the C programmer. It is an actual bug fix in Subsurface for the
target compiler, since it introduces bogus instructions.

The "month" variable ends up being incremented up to 72 for a single
"month++" call (if inside offset brackets).

gcc -v
Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --wi
th-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --dis
able-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --d
isable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --with
out-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enabl
e-hash-synchronization --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.5 (mingw-vista special r3)

OS: Windows 7 [6.1.7601] - x64

Better explained here:
http://lists.hohndel.org/pipermail/subsurface/2013-February/003967.html

Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
---
 statistics.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/statistics.c b/statistics.c
index 73c7718..b552580 100644
--- a/statistics.c
+++ b/statistics.c
@@ -361,7 +361,8 @@ static void update_yearly_stats()
 
 		for (j = 0; combined_months < stats_yearly[i].selection_size; ++j) {
 			combined_months += stats_monthly[month].selection_size;
-			process_interval_stats(stats_monthly[month++], &year_iter, &month_iter);
+			process_interval_stats(stats_monthly[month], &year_iter, &month_iter);
+			month++;
 		}
 	}
 }
-- 
1.7.11.msysgit.0



More information about the subsurface mailing list