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;

Reply via email to