[Rd] Compiler + stopifnot bug

Duncan Murdoch murdoch@dunc@n @ending from gm@il@com
Thu Jan 3 21:37:17 CET 2019


I see this too; by bisection, it seems to have first appeared in r72943.

Duncan Murdoch

On 03/01/2019 2:18 p.m., Iñaki Ucar wrote:
> Hi,
> 
> I found the following issue in r-devel (2019-01-02 r75945):
> 
> `foo<-` <- function(x, value) {
>    bar(x) <- value * x
>    x
> }
> 
> `bar<-` <- function(x, value) {
>    stopifnot(all(value / x == 1))
>    x + value
> }
> 
> `foo<-` <- compiler::cmpfun(`foo<-`)
> `bar<-` <- compiler::cmpfun(`bar<-`)
> 
> x <- c(2, 2)
> foo(x) <- 1
> x # should be c(4, 4)
> #> [1] 3 3
> 
> If the functions are not compiled or the stopifnot call is removed,
> the snippet works correctly. So it seems that something is messing
> around with the references to "value" when the call to stopifnot gets
> compiled, and the wrong "value" is modified. Note also that if "x <-
> 2", then the result is correct, 4.
> 
> Regards,
>



More information about the R-devel mailing list