https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82952
Volker Reichelt <reichelt at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |reichelt at gcc dot gnu.org --- Comment #6 from Volker Reichelt <reichelt at gcc dot gnu.org> --- Here's a short example that shows that something exponential is going on: ============================================ struct A { virtual ~A() {} A& operator<<(int) { return *this; } }; void foo(A& a, bool b) { if (b) a << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8 << 9 << 10 << 11 << 12 << 13 << 14 << 15; } ============================================ Increasing the number of calls to the operator<< increases the compile time roughly by a factor of 4 as the following table shows: calls | compile time ------+------------- 10 | 0.25s 11 | 0.95s 12 | 3.7 s 13 | 14.8 s 14 | 59 s 15 | 234 s For 20 calls the estimated compile time would be almost 3 days. With any of the two options removed, the compile time for 20 calls is way below 0.1s. This happens since GCC 7.1.0 which introduced the "-Wduplicated-branches" option.