[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