https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66190
--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> --- So maybe the following? Not sure how well it plays with weak vars/fns though... --- a/gcc/c-family/c-ubsan.c +++ b/gcc/c-family/c-ubsan.c @@ -433,8 +433,9 @@ ubsan_maybe_instrument_reference_or_call (location_t loc, tree op, tree ptype, int save_flag_delete_null_pointer_checks = flag_delete_null_pointer_checks; flag_delete_null_pointer_checks = 1; - if (!tree_single_nonzero_warnv_p (op, &strict_overflow_p) - || strict_overflow_p) + if ((!tree_single_nonzero_warnv_p (op, &strict_overflow_p) + || strict_overflow_p) + && !TREE_STATIC (TREE_OPERAND (op, 0))) instrument = true; flag_delete_null_pointer_checks = save_flag_delete_null_pointer_checks;