On Mon, Nov 11, 2019 at 3:45 AM Andreas Schwab <sch...@suse.de> wrote: > Only ubsan is supported so far. This has been tested on openSUSE > Tumbleweed, there are no testsuite failures. > > * configure.tgt (riscv64-*-linux*): Enable build.
I tried this on my riscv64 Fedora system, and I get a build error. In file included from ../../../../gcc-git/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:167: ../../../../gcc-git/libsanitizer/sanitizer_common/sanitizer_internal_defs.h:342:72: error: narrowing conversion of ‘-1’ from ‘int’ to ‘long unsigned int’ [-Wnarrowing] 342 | typedef char IMPL_PASTE(assertion_failed_##_, line)[2*(int)(pred)-1] | ^ ... ../../../../gcc-git/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:1136:1: note: in expansion of macro ‘CHECK_SIZE_AND_OFFSET’ 1136 | CHECK_SIZE_AND_OFFSET(ipc_perm, mode); | ^~~~~~~~~~~~~~~~~~~~~ It appears that the problem is that my system defines the icp_perm mode field as __mode_t whereas the sanitizer assumes it will be unsigned short, followed by an unsigned short pad field. I haven't looked at the full history yet, but there were apparently similar problems with the aarch64 port, so maybe we need some special code for riscv to make this work? I don't know why it worked for you. Maybe a different glibc or kernel version? Incidentally, the libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h file has an obvious problem in the struct __sanitizer_ipc_perm definition, because it has an ifdef for __aarch64__ inside an ifdef for __sparc__, and there is no way the __aarch64__ test can ever succeed there. There is a second __aarch64__ test a little farther down that looks OK. Maybe a patch merge error? Jim