https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82952
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |compile-time-hog Status|UNCONFIRMED |NEW Last reconfirmed| |2017-11-13 CC| |jakub at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. I suspect UBSAN creates a large number of branches and -Wduplicated-branches isn't very effective. In fact it looks quadratic given we do 128 if (warn_duplicated_branches) 129 walk_tree_without_duplicates (&DECL_SAVED_TREE (fndecl), 130 do_warn_duplicated_branches_r, NULL); and do_warn_duplicated_branches_r does itself /* Compute the hash of the then branch. */ inchash::hash hstate0 (0); inchash::add_expr (thenb, hstate0); hashval_t h0 = hstate0.end (); ... && !walk_tree_without_duplicates (&thenb, expr_from_macro_expansion_r, NULL) thus we process each tree (in COND_EXPRs) a quadratic amount of times. inchash is very likely also not avoiding walking duplicates multiple times, as SAVE_EXPR is tcc_expression it even walks those multiple times. As a band-aid I suggest to limit the depth we walk here somehow...