On 10/31/24 21:06, Ivan Krylov wrote:
On Thu, 31 Oct 2024 17:59:01 +0100
Tomas Kalibera <tomas.kalib...@gmail.com> wrote:
for now, if you know an elegant, minimal way how to suppress
this, and have the time and energy, a patch would be welcome
A fresh R-4.4.2 build compiled with clang-19 -fsanitize=function gives
the error:
$ bin/R -q -s -e 'library(survival); survdiff(Surv(futime, fustat) ~
rx,data=ovarian)'
dotcode.c:2008:2: runtime error: call to function survdiff2 through pointer to
incorrect function type 'void (*)(void *, void *, void *, void *, void *, void
*, void *, void *, void *, void *, void *, void *, void *)'
/tmp/RtmpW0SC00/R.INSTALL5d1b3402d0c5/survival/src/survdiff2.c:10: note:
survdiff2 defined here
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior dotcode.c:2008:2
A suppression file will avoid the error without patching R:
$ cat dotcode.supp
function:dotcode.c
or more fine-grained:
$ cat dotcode.supp
function:do_dotCode
$ UBSAN_OPTIONS="suppressions=$(realpath dotcode.supp)" bin/R -q -s -e
'library(survival); survdiff(Surv(futime, fustat) ~ rx,data=ovarian)'
Call:
survdiff(formula = Surv(futime, fustat) ~ rx, data = ovarian)
<and so on>
Alternatively, the following patch will also suppress the error:
--- src/main/dotcode.c 2024-03-26 23:02:08.000000000 +0000
+++ src/main/dotcode.c 2024-10-31 19:53:36.272334541 +0000
@@ -1658,6 +1658,9 @@
#define FILL 0xee
#define NG 64
+#ifdef __clang__
+__attribute__((no_sanitize("function")))
+#endif
attribute_hidden SEXP do_dotCode(SEXP call, SEXP op, SEXP args, SEXP env)
{
void **cargs, **cargs0 = NULL /* -Wall */;
I hope I understood you correctly that you're looking for a tested
workaround.
Thanks, yes - and there is also attribute_no_sanitizer_instrumentation
in Defn.h - but isn't there a finer-grained way to suppress reports just
of this particular issue, ideally at finer granularity than a function?
Tomas
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel