On 29.09.26 11:18, Chao Li wrote:
On Sep 29, 2026, at 13:47, Peter Eisentraut <[email protected]> wrote:

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.

I propose to add pg_attribute_no_sanitize_function() and place it on the 
functions that make such calls.  This is similar to some existing 
pg_attribute_no_sanitize_xxx attributes.
<0001-Silence-fsanitize-function-where-we-cast-function-po.patch>

Overall looks good to me.

Just one comment, in dynahash.c, hash_search_with_hash_value() is marked with 
the new annotation, feels like hash_update_hash_key() also needs to be 
annotated, because it also invokes match and keycopy etc callbacks.

Yes, I think you are right. My patch was based on what is required to get the test suite to pass. It appears that there are currently no callers of hash_update_hash_key() with a string-based hash table, so this case isn't triggered, but we should add the annotation there as well for completeness.



Reply via email to