I'm not really sure where the responsibility for this lies, but
suppressPackageStartupMessages({
library(conflicted)
library(BiocGenerics) # not too heavy, exports a tweaked evalq
library(xml2)
})
read_html("https://bioconductor.org")
results in a segfault
terminate called after throwing an instance of 'Rcpp::eval_error'
what(): Evaluation error: evalq found in 2 packages. You must indicate which one you want with ::
* BiocGenerics::evalq
* base::evalq.
Normally (e.g., typing evalq at the command line), 'conflicted' would report the conflict between the two definitions of evalq as an error.
Rcpp seems to run in to trouble at inst/include/Rcpp/api/meat/Rcpp_eval.h:118 and 134
Shield<SEXP> res(internal::Rcpp_eval_impl(call, R_GlobalEnv));
...
throw eval_error(CHAR(STRING_ELT(conditionMessage, 0)));
the call stack before the segfault is
(gdb) where
#0 Rcpp::Rcpp_eval (expr=0x150b520, env=0x64b9d8)
at ../inst/include/Rcpp/api/meat/Rcpp_eval.h:98
#1 0x00007fffea3fb5c3 in get_rcpp_cache () at barrier.cpp:100
#2 0x00007fffea3fb6ac in rcpp_get_stack_trace () at barrier.cpp:119
#3 0x00007fffea107834 in rcpp_get_stack_trace ()
at /home/mtmorgan/R/x86_64-pc-linux-gnu-library/3.5-Bioc-3.8/Rcpp/include/Rcpp/routines.h:125
#4 0x00007fffea108b4d in exception_to_r_condition (ex=...)
at /home/mtmorgan/R/x86_64-pc-linux-gnu-library/3.5-Bioc-3.8/Rcpp/include/Rcpp/exceptions.h:303
#5 0x00007fffea0f7752 in _xml2_read_connection_ (conSEXP=0x12bd038,
chunk_sizeSEXP=0x12bd2d8) at RcppExports.cpp:19
#6 0x00007ffff7816a59 in R_doDotCall (
ofun=0x7fffea0f7491 <_xml2_read_connection_(SEXP, SEXP)>, nargs=2,
cargs=0x7ffffffdec20, call=0x974c18)
at /home/mtmorgan/src/R-3-5-branch/src/main/dotcode.c:573
...
and the expression leading to the exception is, after stepping to line 118
(gdb) call Rf_PrintValue(call->t)
tryCatch(evalq(getNamespace("Rcpp"), <environment>), error = function (x)
x, interrupt = function (x)
x)
I guess the problem is that an exception occurs while Rcpp is trying to handle an exception?
This is the third time through Rcpp_eval(); the second time through generates the 'conflicted' error. The code in xml2 is
Rcpp::Environment baseEnv = Rcpp::Environment::base_env();
Rcpp::Function readBin = baseEnv["readBin"];
RawVector out = Rcpp::as<RawVector>(readBin(con, "raw", bytes));
where somehow it seems like evalq() used to evaluate readBin() should be the version seen by the xml2 namespace rather than found on the search path?
The context is at r-lib/conflicted#8
I'm not really sure where the responsibility for this lies, but
results in a segfault
Normally (e.g., typing
evalqat the command line), 'conflicted' would report the conflict between the two definitions of evalq as an error.Rcpp seems to run in to trouble at inst/include/Rcpp/api/meat/Rcpp_eval.h:118 and 134
the call stack before the segfault is
and the expression leading to the exception is, after stepping to line 118
I guess the problem is that an exception occurs while Rcpp is trying to handle an exception?
This is the third time through Rcpp_eval(); the second time through generates the 'conflicted' error. The code in xml2 is
where somehow it seems like
evalq()used to evaluatereadBin()should be the version seen by the xml2 namespace rather than found on the search path?The context is at r-lib/conflicted#8