Check for memory corruption in the sort algorithm. Specifically the downheap() functions. There are two of them. In sort.c and sortind.c
Through the joys (perhaps a compiler bug) of C inline sometimes doesn't inline because the compiler sees it as infeasible to do so. But when the inline is silently dropped, the function is put in the symbol table, when a function is in the symbol table it is extern. If two functions are in the symbol table with the same name one will silently be dropped. so file1.c: static inline void foobar() file2.c: static inline void foobar() If the compiler drops the inline it's the same as file1.c: extern void foobar() file2.c: extern void foobar() Which is just awesome Name conflicts like this are resolved by dropping one function. So trace through the code and check that the right downheap() function (they have slightly different prototypes) is being called. I found this out because of weird failures in statistics and sort as well. And fixed it by removing the "inline" keyword in front of the downheap functions. Regards, Greg. ----- Original Message ---- From: "[email protected]" <[email protected]> To: Brian Gough <[email protected]> Cc: [email protected] Sent: Wednesday, 19 August, 2009 9:31:42 AM Subject: Re: [Bug-gsl] GSL: make check fails Brian, I put some print statements before the the gsl_test in the gsl-1.12/statistics/test_float_source.c around line 335 and the test passed. If I comment out the print statement the test failedas before. Am I inserted the print statements in the right place? /* Test for IEEE handling - set third element to NaN */ groupa [3*stridea] = GSL_NAN; { BASE max = FUNCTION(gsl_stats,max) (groupa, stridea, na); printf ("\nmax = " OUT_FORMAT, max); BASE expected = GSL_NAN; printf ("\nexpected = " OUT_FORMAT, expected); printf ("\n!insana(max) = %i\n", !isnan(max)); gsl_test (!isnan(max), NAME(gsl_stats) "_max NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", max, expected); } { BASE min = FUNCTION(gsl_stats,min) (groupa, stridea, na); printf ("\nmin = " OUT_FORMAT, min); BASE expected = GSL_NAN; printf ("\nexpected = " OUT_FORMAT, expected); printf ("\n!insana(min) = %i\n", !isnan(min)); gsl_test (!isnan(min), NAME(gsl_stats) "_min NaN (" OUT_FORMAT " observed vs " OUT_FORMAT " expected)", min, expected); } __________________________________________________________________________________ Find local businesses and services in your area with Yahoo!7 Local. Get started: http://local.yahoo.com.au _______________________________________________ Bug-gsl mailing list [email protected] http://lists.gnu.org/mailman/listinfo/bug-gsl
