[Rd] Latest R-devel fails to compile with --enable-strict-barrier
Ivan Krylov
|kry|ov @end|ng |rom d|@root@org
Thu Mar 5 22:24:42 CET 2026
Hello R developers,
'.../configure --enable-strict-barrier && make' eventually fails to
load tools.so due to an undefined reference to OBJECT().
Judging by the disassembly, the call surfaces in deparseRd(), close to
the beginning of the function:
if(!isString(e) || LENGTH(e) != 1)
error(_("'deparseRd' only supports deparsing character elements"));
e = STRING_ELT(e, 0);
return (TYPEOF(s) == INTSXP && !inherits(s, "factor"));
if(!isInteger(state) || LENGTH(state) != 5) error(_("bad state"));
if (OBJECT(s)) {
12828: 48 89 df mov %rbx,%rdi
1282b: e8 d0 19 ff ff call 4200 <OBJECT using plt>
12830: 85 c0 test %eax,%eax
12832: 0f 85 57 03 00 00 jne 12b8f <deparseRd+0x3df>
...
klass = getAttrib(s, R_ClassSymbol);
12b8f: 48 8b 05 ca 73 00 00 mov 0x73ca(%rip),%rax # R_ClassSymbol
12b96: 48 89 df mov %rbx,%rdi
12b99: 48 8b 30 mov (%rax),%rsi
12b9c: e8 3f 1b ff ff call 46e0 <Rf_getAttrib using plt>
Looking at the preprocessor output, I think that the call to OBJECT()
appears through the inlined function isInteger(), which calls inlined
function inherits(), which contains the call to OBJECT(), which is not
available to the 'tools' shared library due to being newly hidden.
Without strict barrier checking, OBJECT(s) gets expanded to
((s)->sxpinfo.obj), and all works well.
--
Best regards,
Ivan
More information about the R-devel
mailing list