[Rd] Difference in NA behavior in R-devel running under valgrind

Tomas Kalibera tom@@@k@||ber@ @end|ng |rom gm@||@com
Fri Apr 30 10:02:45 CEST 2021


I can reproduce on my system, running an unoptimized R build (-O0) in 
valgrind produces NaN (valgrind 3.15.0, gcc 9.3.0 - Ubuntu 20.04/x86_64) 
for the example, but without valgrind it produces NA.

Valgrind modifies the binary code before running it and this is probably 
what is causing the different NaN payload propagation in this case. This 
is not great, it seems to be yet another way how the NA/NaN distinction 
may become unreliable.

Tomas

On 4/30/21 2:42 AM, brodie gaslam via R-devel wrote:
> Forgot to mention, my builds were not instrumented for valgrind, and also:
>
> vagrant using vagrant:/vagrant/trunk$ ./bin/R --version
> R Under development (unstable) (2021-04-27 r80232) -- "Unsuffered Consequences"
> Copyright (C) 2021 The R Foundation for Statistical Computing
> Platform: x86_64-pc-linux-gnu (64-bit)
>
>
>   On Thursday, April 29, 2021, 8:40:21 PM EDT, brodie gaslam via R-devel <r-devel using r-project.org> wrote:
>
>
>> On Thursday, April 29, 2021, 6:35:16 PM EDT, Winston Chang <winstonchang1 using gmail.com> wrote:
>> Just to be clear, the RD binary that Jon used was NOT compiled with
>> Valgrind level 2 instrumentation. In his example, however, he did run it
>> with valgrind, as in:
>>
>> # RD -d valgrind --quiet -e "sum(c(1, NA))"
>> ...
>>> sum(c(1, NA))
>> [1] NaN
>>
>> `RD` in that Docker image is a standard build of R-devel. The Docker
>> image does include a build of R-devel with valgrind level 2
>> instrumentation, called `RDvalgrind`. It exhibits the same NaN behavior
>> when run with `-d valgrind`, but when run without `-d valgrind` it
>> returns NA.
>>
>> # RDvalgrind -d valgrind --quiet -e "sum(c(1, NA))"
>>> sum(c(1, NA))
>> [1] NaN
>>
>> # RDvalgrind --quiet -e "sum(c(1, NA))"
>>> sum(c(1, NA))
>> [1] NA
>>
>> In short `RDvalgrind` behaves the same as `RD`. However, adding `-d
>> valgrind` to either one causes it to return NaN.
>>
>> -Winston
> Thanks for the clarification.
>
> Using the same revision in the e-mail I get the reported issue under -O0,
> but not under -O2.  It looks like r-debug builds with -O0, and presumably
> the release debian version is -O2 which is usually the default?  I'm
> certainly no expert in this area but it seems like it could be an
> optimization level rather than a release vs devel issue?
>
> This is what I see:
>
> gcc version 10.1.0 (Ubuntu 10.1.0-2ubuntu1~18.04)
>
>      CC="gcc-10"
>      CFLAGS="-g -O0 -Wall -pedantic -Wextra -std=gnu99"
>
>      vagrant using vagrant:/vagrant/trunk$ ./bin/R -d valgrind --vanilla --quiet -e "sum(c(1,NA))"
>      ==9020== Memcheck, a memory error detector
>      ==9020== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
>      ==9020== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
>      ==9020== Command: /vagrant/trunk/bin/exec/R --vanilla --quiet -e sum(c(1,NA))
>      ==9020==
>      > sum(c(1,NA))
>      [1] NaN
>
> And then:
>
>      CC="gcc-10"
>      CFLAGS="-g -O2 -Wall -pedantic -Wextra -std=gnu99"
>
>      vagrant using vagrant:/vagrant/trunk$ ./bin/R -d valgrind --vanilla --quiet -e "sum(c(1,NA))"
>      ==32751== Memcheck, a memory error detector
>      ==32751== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
>      ==32751== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
>      ==32751== Command: /vagrant/trunk/bin/exec/R --vanilla --quiet -e sum(c(1,NA))
>      ==32751==
>      > sum(c(1,NA))
>      [1] NA
>
> Sadly I did not think to run the -O0 version without valgrind.
>
>
> Best,
>
> B.
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list