[Rcpp-devel] tracking volatile bug

Serguei Sokol serguei.sokol at gmail.com
Tue Nov 18 19:10:58 CET 2014


Le 18/11/2014 16:39, Romain François a écrit :
>
>> Le 18 nov. 2014 à 14:42, Serguei Sokol <serguei.sokol at gmail.com> a écrit :
>>
>> /* call this R command: source("FileName") */
>>     int errorOccurred;
>>     SEXP e = lang2(install("source"), mkString("FileName"));
>>         /* mkChar instead of mkString would lead to this runtime error:
>> 	 * Error in source(FileName) : unimplemented type 'char' in 'eval' */
>>     R_tryEval(e, R_GlobalEnv, &errorOccurred);
>
> e is not protected here. Does the problem go away if you protect it:
>
> SEXP e = PROTECT( lang2(install("source"), mkString("FileName"))) ;
you mean
SEXP e = PROTECT(lang2(install("source"), mkChar("expm.higham.R")));
(because mkString() had no problem)?
No, it does not, the problem is still there.

>
>
> Or more R/C++ idiomatically, which is both nicer and safer.
>
> Language e( "source", "FileName" ) ;
This works as expected. We can suppose that behind the stage
"FileName" is wrap()-ed here with mkString() and not with mkChar().
That's why it's working.

>
>> which suggests that somewhere in Rcpp or RcppArmadillo there is
>> a mkChar() call instead of mkString().
>>
>> Other times, error message can say something like
>> "argument type[1]='x' must be one of 'M','1','O','I','F' or 'E'"
>> or "argument type[1]='character' must be a one-letter character string"
>> This latter message is somewhat volatile per se. The part of message
>> just after "type[1]=" can be 'character' (as above) or 'method' or 'ANY' etc.
>
> That kind of problem usually is related to premature GC.
I will try "gctorture(TRUE)" suggested by Martin.

Thanks,
Serguei.


More information about the Rcpp-devel mailing list