Jskud@Jskud.com
2005-Apr-30 11:16 UTC
[Rd] segfault during build of 2.1.0 on RH9; print.POSIXct implicated (PR#7826)
In attempting to build R using rpmbuild --rebuild R-2.1.0-0.fdr.2.fc3.src.rpm on a fairly up-to-date RedHat 9 system (that is, with patches installed through May 1 2004), it failed at the make check-all step. The problem was reproducible by going into the tests directory and make test-Segfault The last lines of the saved file no-segfault.Rout.fail are> > ## c.POSIXct : > > f <- get("c.POSIXct", pos = 'package:base') > > f() > character(0) > > f(NULL) > character(0) > > f(,NULL) > Error in lapply(list(...), unclass) : argument is missing, with no default > > f(NULL,NULL) > character(0) > > f(list()) > character(0) > > f(l0) > character(0)I was able to reproduce the problem (a segfault) as the following simple transcript demonstrates: LC_ALL=C SRCDIR=. R_DEFAULT_PACKAGES= ../bin/R --vanilla R : Copyright 2005, The R Foundation for Statistical Computing Version 2.1.0 (2005-04-18), ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for a HTML browser interface to help. Type 'q()' to quit R. > unusual_but_ok <- c.POSIXlt(character(0)) > unusual_but_ok character(0) > unusual_and_faults <- c.POSIXct(character(0)) > unusual_and_faults Segmentation fault Running this test program under gdb, we find that we're running off the end of the stack, with 4222 stack frames showing -- apparently in an infinite recursion -- "as.character" shows up every 69 function calls: #64 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4, args=0x8af8b00, rho=0x8af8b70, callrho=0x8af8b70, defrho=0x829d4c0, ans=0xbff042b8) at objects.c:328 #133 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4, args=0x8af35f0, rho=0x8af3660, callrho=0x8af3660, defrho=0x829d4c0, ans=0xbff08538) at objects.c:328 #202 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4, args=0x8aeca08, rho=0x8aeca78, callrho=0x8aeca78, defrho=0x829d4c0, ans=0xbff0c7b8) at objects.c:328 #271 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4, args=0x8ae7514, rho=0x8ae7584, callrho=0x8ae7584, defrho=0x829d4c0, ans=0xbff10a38) at objects.c:328 #340 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4, args=0x8ade4c0, rho=0x8ade530, callrho=0x8ade530, defrho=0x829d4c0, ans=0xbff14cb8) at objects.c:328 So it would seem that *printing* the unusual POSIXct value is suspect. Looking at a R-1.8.1 install, we find these definitions in base/R/base: print.POSIXct <- function(x, ...) { print(format(x, usetz=TRUE), ...) invisible(x) } print.POSIXlt <- function(x, ...) { print(format(x, usetz=TRUE), ...) invisible(x) } However, looking at the 2.1.0 src file R-2.1.0/src/library/base/R/datetime.R, we find print.POSIXct <- function(x, ...) { print(format(x, usetz=TRUE, ...), ...) invisible(x) } print.POSIXlt <- function(x, ...) { print(format(x, usetz=TRUE), ...) invisible(x) } Note the suspicious definition of print.POSIXct using *two* sets of ellipses, and that the print.POSIXct and print.POSIXlt definitions no longer match. /Jskud --please do not edit the information below-- Version: platform = i686-pc-linux-gnu arch = i686 os = linux-gnu system = i686, linux-gnu status = major = 2 minor = 1.0 year = 2005 month = 04 day = 18 language = R []
Apparently Analagous Threads
- segfault during build of 2.1.0 on RH9; print.POSIXct implicated (PR#7827)
- (PR#7826) segfault during build of 2.1.0 on RH9; print.POSIXct
- Re: (PR#7826) ... segfault during build of 2.1.0 on RH9; print.POSIXct ...
- (PR#7826) Re: ... print.POSIXct .. infinite recursion
- rdbi segmentation fault