From murdoch@dunc@n @ending from gm@il@com  Fri Jan  4 01:05:20 2019
From: murdoch@dunc@n @ending from gm@il@com (Duncan Murdoch)
Date: Thu, 3 Jan 2019 19:05:20 -0500
Subject: [Rd] Compiler + stopifnot bug
In-Reply-To: <ffedc6fa-2f6c-21f3-b29a-8e1f0e3fac89@gmail.com>
References: <CALEXWq2CneLqRqaD5H4_-qQEzB3LjhSwoqc=Mg3f9WeHAirmXg@mail.gmail.com>
 <ffedc6fa-2f6c-21f3-b29a-8e1f0e3fac89@gmail.com>
Message-ID: <dce3cbe4-ee06-ec13-d307-5230e98df7c8@gmail.com>

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



[Rd] Compiler + stopifnot bug
Duncan Murdoch