Merge remote branch 'origin/master' into import-gui
[pspp] / src / data / casereader.c
index 37adbb37d605c1399051fc98a84e433e6b90d1ee..423a4dada271b432bef5ce8397f4f771b09e909a 100644 (file)
@@ -239,11 +239,24 @@ static casenumber
 casereader_count_cases__ (const struct casereader *reader,
                           casenumber max_cases)
 {
-  struct casereader *clone = casereader_clone (reader);
-  casenumber n_cases = casereader_advance (clone, max_cases);
+  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);
   return n_cases;
 }