Thanks, Ivan - I've just committed a fix, r90278. Mikael
From: Ivan Krylov <[email protected]> To: [email protected] Hello R-devel, Here's a compilation warning and a snprintf() long / long long type mismatch on Windows: seq.c: In function 'do_sequence': seq.c:1167:47: warning: format '%ld' expects argument of type 'long int', but argument 4 has type 'R_xlen_t' {aka 'long long int'} [-Wformat=] ## This will require 16 GiB of memory! x <- integer(2^31) y <- integer(2^31+1) sequence(x, y, y) # Error in sequence.default(x, y, y) : # (converted from warning) length(nvec) -2147483648 < -2147483647 = # max(length(from), length(by)) -- future R`s default 'recycle = # TRUE' will recycle 'nvec' The fix is to print the lengths as 'long long' like in the rest of base R code. Index: src/main/seq.c =================================================================== --- src/main/seq.c (revision 90253) +++ src/main/seq.c (working copy) @@ -1164,8 +1164,8 @@ static bool warn_1st = true; if(warn_1st && maybe_warn) { char msg[99]; - snprintf(msg, 99, "length(nvec) %ld < %ld = max(length(from), length(by))", - lengths_len, max_len); + snprintf(msg, 99, "length(nvec) %lld < %lld = max(length(from), length(by))", + (long long)lengths_len, (long long)max_len); warning(_("%s -- future R`s default 'recycle = TRUE' will recycle 'nvec'"), msg); warn_1st = false; }
______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
