https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70342
--- Comment #8 from Marek Polacek <mpolacek at gcc dot gnu.org> --- So it seems this fixes this problem: diff --git a/gcc/c-family/c-ubsan.c b/gcc/c-family/c-ubsan.c index 4022bdf..b829c04 100644 --- a/gcc/c-family/c-ubsan.c +++ b/gcc/c-family/c-ubsan.c @@ -395,8 +395,11 @@ 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) + /* Instrumenting &TARGET_EXPR <...> is a waste and can result + in compile-time hog; see PR70342. */ + && TREE_CODE (TREE_OPERAND (op, 0)) != TARGET_EXPR) instrument = true; flag_delete_null_pointer_checks = save_flag_delete_null_pointer_checks;