[R] Spare some CPU cycles for testing lme?

Douglas Bates bates at stat.wisc.edu
Tue Sep 14 15:18:30 CEST 2004


Prof Brian D Ripley wrote:
> As others have said, this needs tools not CPU cycles: gctorture or valgrind.
> 
> Valgrind found (after a few seconds and on the first pass)
> 
> ==23057== Invalid read of size 4
> ==23057==    at 0x3CF4E645: ssc_symbolic_permute (Mutils.c:373)
> ==23057==    by 0x3CF5BF75: ssclme_create (ssclme.c:168)
> ==23057==    by 0x80AF5E8: do_dotcall
> (/users/ripley/R/svn/R-devel/src/main/dotcode.c:640)
> ==23057==    by 0x80CFA84: Rf_eval
> (/users/ripley/R/svn/R-devel/src/main/eval.c:399)
> ==23057==  Address 0x3C7F3BD0 is 4 bytes before a block of size 524 alloc'd
> ==23057==    at 0x3C01CB56: calloc (in
> /opt/local/lib/valgrind/vgpreload_memcheck.so)
> ==23057==    by 0x80F9EBE: R_chk_calloc
> (/users/ripley/R/svn/R-devel/src/main/memory.c:2151)
> ==23057==    by 0x3CF4E515: ssc_symbolic_permute (Mutils.c:352)
> ==23057==    by 0x3CF5BF75: ssclme_create (ssclme.c:168)
> ==23057==
> ==23057== Use of uninitialised value of size 8
> ==23057==    at 0x80C0137: Rf_duplicate
> (/users/ripley/R/svn/R-devel/src/main/duplicate.c:160)
> ==23057==    by 0x80BFA85: Rf_duplicate
> (/users/ripley/R/svn/R-devel/src/main/duplicate.c:101)
> ==23057==    by 0x80BFEB3: Rf_duplicate
> (/users/ripley/R/svn/R-devel/src/main/duplicate.c:154)
> ==23057==    by 0x816ED96: do_subset2_dflt
> (/users/ripley/R/svn/R-devel/src/main/subset.c:816)
> ==23057==
> ==23057== Conditional jump or move depends on uninitialised value(s)
> ==23057==    at 0x3CF62229: ssclme_fitted (ssclme.c:1587)
> ==23057==    by 0x80AF646: do_dotcall
> (/users/ripley/R/svn/R-devel/src/main/dotcode.c:646)
> ==23057==    by 0x80CFA84: Rf_eval
> (/users/ripley/R/svn/R-devel/src/main/eval.c:399)
> ==23057==    by 0x80D1D80: do_set
> (/users/ripley/R/svn/R-devel/src/main/eval.c:1280)
> 
> which is pretty definitive evidence of a problem (possibly 2) in the code.
> 
> I strongly recommend valgrind (http://valgrind.kde.org/) if you are using
> x86 Linux.  It has found quite a few errors in R and in certain packages
> recently.  The only thing to watch is that optimized BLASes will probably
> crash it.
> 

You're right.  I had (at least) two thinko's in that code.  The problems 
show up in the lme4 package but the errors in the C code are in the 
Matrix package.  I will upload a repaired version of the Matrix package.




More information about the R-help mailing list