Closed kondziu closed 3 years ago
Segfaults in REAL_ELT(hash_to_index_table, index)
REAL_ELT(hash_to_index_table, index)
index: 127063 sexp (hash_to_index_table): 0x7ffff3420fd0 hash_to_index_table length: 262144 hash_to_index_table type: REALSXP (actually R_len_t)
127063
0x7ffff3420fd0
262144
REALSXP
R_len_t
inside function irash_add (rash.c:377)
irash_add
Message:
no known object for fault: No anode error handling an event, shutting down: No anode CRASHING : No anode *** caught segfault *** address 0x7ffff350cdd8, cause 'memory not mapped' Traceback: 1: ufovectors::subscript(ufo, subscript)
Repro code (not minimal and messy):
library(ufovectors) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- NULL reference <- integer(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- TRUE reference <- 1:100000 result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- FALSE reference <- integer(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(FALSE, TRUE) reference <- (1:100000)[subscript] result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(TRUE, TRUE, FALSE) reference <- (1:100000)[subscript] result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(TRUE, FALSE, NA) reference <- (1:100000)[subscript] result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- 0 reference <- integer(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(0, 0) reference <- integer(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(0, 1, 0, 100000) reference <- as.integer(c(1, 100000)) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.integer(0) reference <- integer(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.integer(42) reference <- as.integer(42) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.integer(c(4, 10, 7, 100)) reference <- as.integer(c(4, 10, 7, 100)) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.integer(c(4, 10, NA, 7, NA, 100, NA)) reference <- as.integer(c(4, 10, NA, 7, NA, 100, NA)) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.integer(c(1:1000, 2000:5000, 10:1000, 6000:10000)) reference <- as.integer(c(1:1000, 2000:5000, 10:1000, 6000:10000)) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.integer(-10) reference <- (1:100000)[-10] result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.integer(c(-10, -100, -100, -1000)) reference <- (1:100000)[c(-10, -100, -100, -1000)] result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.integer(-c(1:1000, 2000:5000, 10:1000, 6000:10000)) reference <- (1:100000)[as.integer(-c(1:1000, 2000:5000, 10:1000, 6000:10000))] result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.integer(-as.integer(1:100000)) reference <- integer(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- 0 reference <- numeric(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(0, 0) reference <- numeric(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(0, 1, 0, 100000) reference <- c(1, 100000) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.numeric(0) reference <- numeric(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.numeric(42) reference <- as.numeric(42) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(4, 10, 7, 100) reference <- c(4, 10, 7, 100) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(4, 10, NA, 7, NA, 100, 100, NA) reference <- c(4, 10, NA, 7, NA, 100, 100, NA) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(1:1000, 2000:5000, 10:1000, 6000:10000) reference <- c(1:1000, 2000:5000, 10:1000, 6000:10000) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- as.numeric(-10) reference <- (1:100000)[-10] result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c(-10, -100, -100, -1000) reference <- (1:100000)[c(-10, -100, -100, -1000)] result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- -c(1:1000, 2000:5000, 10:1000, 6000:10000) reference <- (1:100000)[-c(1:1000, 2000:5000, 10:1000, 6000:10000)] result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- -as.numeric(1:100000) reference <- numeric(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- "butts" reference <- as.integer(NA) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 subscript <- c("a", "b", "c") reference <- as.integer(c(NA, NA, NA)) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 ufo_names <- paste0("N", 1:100000) ufo <- setNames(ufo, ufo_names) subscript <- "N42" reference <- as.integer(42) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 ufo_names <- paste0("N", 1:100000) ufo <- setNames(ufo, ufo_names) subscript <- character(0) reference <- integer(0) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 ufo_names <- paste0("N", 1:100000) ufo <- setNames(ufo, ufo_names) subscript <- c("N4", "N10", "N7", "N100", "N100") reference <- c(4, 10, 7, 100, 100) result <- ufovectors::subscript(ufo, subscript) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 ufo_names <- paste0("N", 1:100000) ufo <- setNames(ufo, ufo_names) subscript <- c("N4", NA, "N10", NA, "N7", "N100", "N100", NA) # exposes the segfault! i ran it in sequence with all the previous ones though, gc-related? reference <- c(4, NA, 10, NA, 7, 100, 100, NA) result <- ufovectors::subscript(ufo, subscript) print(result) ufo <- ufo_integer(100000) ufo[1:100000] <- 1:100000 ufo_names <- paste0("N", 1:100000) ufo <- setNames(ufo, ufo_names) subscript <- paste0("N", c(1:1000, 2000:5000, 10:1000, 6000:10000)) reference <- c(1:1000, 2000:5000, 10:1000, 6000:10000) result <- ufovectors::subscript(ufo, subscript)
Segfaults in
REAL_ELT(hash_to_index_table, index)
index:
127063
sexp (hash_to_index_table):0x7ffff3420fd0
hash_to_index_table length:262144
hash_to_index_table type:REALSXP
(actuallyR_len_t
)inside function
irash_add
(rash.c:377)Message:
Repro code (not minimal and messy):