[Rd] another fix for R crashes under enable-strict-barrier, lto, trunk at 72156

Hin-Tak Leung htl10 at users.sourceforge.net
Sat Feb 11 20:30:26 CET 2017


I haven' t touched R for some 18 months, and so I have no idea if this is a recent problems or not; but it certainly did not segfault two years ago.

Since it has been crashing (segfault) under 'make check-all' for over a month, I reckon I'll have to look at it myself, to have it fixed.

I have been having the ' --enable-memory-profiling --enable-strict-barrier --with-valgrind-instrumentation=2" options
for perhaps a decade - because I work(ed) with people who like to write buggy code :-(. And I also run 'make check-all' from time to time until two years ago.

./configure --enable-memory-profiling --enable-strict-barrier --enable-byte-compiled-packages --with-valgrind-instrumentation=2 --enable-lto

current R dev crashes in make check-all . The fix is this:


--- a/src/main/memory.c
+++ b/src/main/memory.c
@@ -3444,7 +3444,7 @@ R_xlen_t (XTRUELENGTH)(SEXP x) { return XTRUELENGTH(CHK2(x)); }
 int  (IS_LONG_VEC)(SEXP x) { return IS_LONG_VEC(CHK2(x)); }
 
 const char *(R_CHAR)(SEXP x) {
-    if(TYPEOF(x) != CHARSXP)
+    if(x && (TYPEOF(x) != CHARSXP))
        error("%s() can only be applied to a '%s', not a '%s'",
              "CHAR", "CHARSXP", type2char(TYPEOF(x)));
     return (const char *)CHAR(x);

It is a fairly obvious fix to a bug since

include/Rinternals.h:#define TYPEOF(x)	((x)->sxpinfo.type)

and it was trying to de-reference "0->sxpinfo.type"  (under  --enable-strict-barrier I think).

So there.

While I subscribe to R-devel, I switched off delivery, so please CC if a response is required.



More information about the R-devel mailing list