Skip to content

uninitialised value in R (PR#13476)

5 messages · Martin Schlather, Mathieu Ribatet

#
Hi,

I get an "Conditional jump or move depends on uninitialised value(s)"
from valgrind when using 'solve' in combination with some simple
C-code. (I did not use other functions of R besides 'solve'.)

In detail: running

R --vanilla -d "valgrind --tool=memcheck --memcheck:leak-check=yes
--num-callers=20 "

and calling

.Call("XXX")
nd <- 3
solve(diag(nd) , as.vector(1:nd))
.Call("XXX")

gives the above valgrind message for the second call of "XXX".
Without "solve" in the middle, there is no message
from valgrind.

Best regards,
Martin


/////////////////////////////// C source file u.cc
#include "u.h"

SEXP XXX() {
  SEXP ans;
  PROTECT (ans = allocVector(INTSXP, 1));
  INTEGER(ans)[0] = 1;
  UNPROTECT(1);
  return ans;
}


/////////////////////////////// header file u.h
#ifndef RFsimu_public_H
#define RFsimu_public_H 1

#include <R.h>
#include <Rinternals.h>
#include <Rmath.h>
#include <Rdefines.h>

extern "C" SEXP XXX();


#endif /* RF_simu_PUBLIC_H*/






--please do not edit the information below--

Version:
 platform = i686-pc-linux-gnu
 arch = i686
 os = linux-gnu
 system = i686, linux-gnu
 status = Under development (unstable)
 major = 2
 minor = 9.0
 year = 2009
 month = 01
 day = 13
 svn rev = 47573
 language = R
 version.string = R version 2.9.0 Under development (unstable)
(2009-01-13 r47573)

Locale:
LC_CTYPE=en_GB.UTF-8;LC_NUMERIC=C;LC_TIME=en_GB.UTF-8;LC_COLLATE=en_GB.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_GB.UTF-8;LC_PAPER=en_GB.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_GB.UTF-8;LC_IDENTIFICATION=C

Search Path:
 .GlobalEnv, package:stats, package:graphics, package:grDevices,
package:utils, package:datasets, package:methods, Autoloads, package:base
#
Hi Martin,

I wasn't able to compile your files. Replacing "extern "C" SEXP XXX();" 
by "SEXP XXX();" solve the issue and I got no message from valgrind - 
I'm not sure this is what you really want to do though.
I hope this might help.
Cheers,
Mathieu


schlather at math.uni-goettingen.de a ?crit :

  
    
#
Hi Mathieu,

Very strange.
(i) The whole package RandomFields is written with ` extern "C" '
    and seems working. There is no message from valgrind
    anywhere, except in two situations that I have boiled
    down to the code in the bug report.
(ii) without ` extern "C" ' I get a warning plus an
    error:
==18032== Conditional jump or move depends on uninitialised value(s)
==18032==    at 0x401620C: (within /lib/ld-2.8.so)
==18032==    by 0x42825C3: (within /lib/libc-2.8.so)
==18032==    by 0x4282989: _dl_sym (in /lib/libc-2.8.so)
==18032==    by 0x417ADE7: (within /lib/libdl-2.8.so)
==18032==    by 0x400DE25: (within /lib/ld-2.8.so)
==18032==    by 0x417B0DB: (within /lib/libdl-2.8.so)
==18032==    by 0x417AD72: dlsym (in /lib/libdl-2.8.so)
==18032==    by 0x811012D: R_dlsym (Rdynload.c:787)
==18032==    by 0x8110A98: R_FindSymbol (Rdynload.c:836)
==18032==    by 0x816E41C: resolveNativeRoutine (dotcode.c:240)
==18032==    by 0x817473A: do_dotcall (dotcode.c:825)
==18032==    by 0x8194C12: Rf_eval (eval.c:487)
==18032==    by 0x805B163: Rf_ReplIteration (main.c:257)
==18032==    by 0x805B3E7: R_ReplConsole (main.c:306)
==18032==    by 0x805B6D7: run_Rmainloop (main.c:966)
==18032==    by 0x8058F80: main (Rmain.c:33)
Error in .Call("XXX") : C symbol name "XXX" not in load table

Have you named the file u.c or u.cc?

Cheers,
Martin
Mathieu Ribatet wrote:

  
    
#
Hi Martin,

Sorry I was stupid. Indeed, I named the file tom.c instead of tmp.cc. 
Now with the right extension, it works with the 'extern "C"' piece of code.

However, for your (ii) point, this shouldn't be related to the omission 
of 'extern "C"' but to the fact that the shared library is not loaded in R.
I used "dyn.load("tmp.so")" (or "tmp.dll" under Windows) before running 
your example. With this, you should not have the message "Error in 
.Call("XXX") : C symbol name "XXX" not in load table ".

It seems weired that you didn't get the message with the "extern "C"". 
Is the loaded shared library the latest version of your code - i.e. I 
mean that did you recompile and reload the latest version of your c++ code?

I hope this will help,
Cheers,
Mathieu

Martin Schlather a ?crit :

  
    
#
Mathieu,

I do not understand what you mean in your email.
I am only interested in the cause of the valgrind
message in
[1] 1
[1] 1 2 3
==25734== Conditional jump or move depends on uninitialised value(s)
==25734==    at 0x401620C: (within /lib/ld-2.8.so)
==25734==    by 0x42825C3: (within /lib/libc-2.8.so)
==25734==    by 0x4282989: _dl_sym (in /lib/libc-2.8.so)
==25734==    by 0x417ADE7: (within /lib/libdl-2.8.so)
==25734==    by 0x400DE25: (within /lib/ld-2.8.so)
==25734==    by 0x417B0DB: (within /lib/libdl-2.8.so)
==25734==    by 0x417AD72: dlsym (in /lib/libdl-2.8.so)
==25734==    by 0x811012D: R_dlsym (Rdynload.c:787)
==25734==    by 0x8110A98: R_FindSymbol (Rdynload.c:836)
==25734==    by 0x816E41C: resolveNativeRoutine (dotcode.c:240)
==25734==    by 0x817473A: do_dotcall (dotcode.c:825)
==25734==    by 0x8194C12: Rf_eval (eval.c:487)
==25734==    by 0x805B163: Rf_ReplIteration (main.c:257)
==25734==    by 0x805B3E7: R_ReplConsole (main.c:306)
==25734==    by 0x805B6D7: run_Rmainloop (main.c:966)
==25734==    by 0x8058F80: main (Rmain.c:33)
==25734==
==25734== Conditional jump or move depends on uninitialised value(s)
==25734==    at 0x4016217: (within /lib/ld-2.8.so)
==25734==    by 0x42825C3: (within /lib/libc-2.8.so)
==25734==    by 0x4282989: _dl_sym (in /lib/libc-2.8.so)
==25734==    by 0x417ADE7: (within /lib/libdl-2.8.so)
==25734==    by 0x400DE25: (within /lib/ld-2.8.so)
==25734==    by 0x417B0DB: (within /lib/libdl-2.8.so)
==25734==    by 0x417AD72: dlsym (in /lib/libdl-2.8.so)
==25734==    by 0x811012D: R_dlsym (Rdynload.c:787)
==25734==    by 0x8110A98: R_FindSymbol (Rdynload.c:836)
==25734==    by 0x816E41C: resolveNativeRoutine (dotcode.c:240)
==25734==    by 0x817473A: do_dotcall (dotcode.c:825)
==25734==    by 0x8194C12: Rf_eval (eval.c:487)
==25734==    by 0x805B163: Rf_ReplIteration (main.c:257)
==25734==    by 0x805B3E7: R_ReplConsole (main.c:306)
==25734==    by 0x805B6D7: run_Rmainloop (main.c:966)
==25734==    by 0x8058F80: main (Rmain.c:33)

with the code originally given. Even if it is a problem
of the library ld, there might be interest by R to have
the problem detected.

Martin