From c7711e39f523f206a74f5d0f52480ad10267e0ca Mon Sep 17 00:00:00 2001 From: John Darrington Date: Mon, 1 Apr 2013 07:34:28 +0200 Subject: [PATCH] Work-around bug in GCC 4.4.5 Gcc 4.4.5 seems to be buggy. For some reason it miscompiles the code in casereader_count_cases__ when compiled with -O2 by not allocating enough stack. This commit works around that problem by putting a dummy variable on the stack. Reviewed-by Ben Pfaff. --- src/data/casereader.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/data/casereader.c b/src/data/casereader.c index c8050c6cde..adb6b6a909 100644 --- a/src/data/casereader.c +++ b/src/data/casereader.c @@ -242,6 +242,19 @@ casereader_count_cases__ (const struct casereader *reader, struct casereader *clone; casenumber n_cases; + /* This seems to avoid a bug in Gcc 4.4.5 where, upon + return from this function, the stack appeared corrupt, + and the program returned to the wrong address. Oddly + the problem only manifested itself when used in conjunction + with the ODS reader, in code such as: + + GET DATA /TYPE=ODS .... + LIST. + */ +#if (__GNUC__ == 4 ) && (__GNUC_MINOR__ == 4) + volatile int x = 1; x++; +#endif + clone = casereader_clone (reader); n_cases = casereader_advance (clone, max_cases); casereader_destroy (clone); -- 2.30.2