[Rd] Compiler + stopifnot bug

Duncan Murdoch murdoch@dunc@n @ending from gm@il@com
Fri Jan 4 01:05:20 CET 2019


On 03/01/2019 3:37 p.m., Duncan Murdoch wrote:
> I see this too; by bisection, it seems to have first appeared in r72943.

Sorry, that was a typo.  I meant r75943.

Duncan Murdoch

> 
> 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