Silence -fsanitize=function where we cast function pointers on purpose In clang, -fsanitize=undefined includes -fsanitize=function, which reports every call made through a function pointer whose type does not exactly match the called function, so it fires all over the place on expression tree walkers and mutators, as well as a few other places. So -fsanitize=undefined hasn't been working cleanly under clang for a while. (Before clang 17, it only applied to C++.)
This is the same issue that caused us to use -Wno-cast-function-type-strict with clang. That warning applies at the place where the mismatching function pointer is passed, so there are potentially hundreds of sites. Therefore, a global disabling is appropriate. The sanitizer, on the other hand, triggers where the function is called, which are only about two dozen places, so it seems possible to silence these checks individually and still main the check for accidental violations elsewhere. Add pg_attribute_no_sanitize_function() and place it on the functions that make such calls. Reviewed-by: Chao Li <[email protected]> Discussion: https://www.postgresql.org/message-id/flat/2db401d9-ef16-430e-a42c-34477006a49f%40eisentraut.org Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/3ff475ac12ec8d8d07cf3fd86144659285a59d83 Modified Files -------------- contrib/pgcrypto/pgcrypto.c | 1 + src/backend/access/heap/heapam.c | 1 + src/backend/nodes/nodeFuncs.c | 12 ++++++++++++ src/backend/parser/analyze.c | 1 + src/backend/utils/hash/dynahash.c | 2 ++ src/backend/utils/mmgr/mcxt.c | 1 + src/include/c.h | 16 ++++++++++++++++ src/include/executor/execScan.h | 1 + src/include/lib/sort_template.h | 2 ++ src/pl/plpgsql/src/pl_funcs.c | 1 + 10 files changed, 38 insertions(+)
