https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65328
Markus Trippelsdorf <trippels at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |compile-time-hog
Status|UNCONFIRMED |NEW
Last reconfirmed| |2015-03-05
CC| |trippels at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #8 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
It is also interesting that gcc-5 rejects the testcase (4.8, 4.9 and clang
accept it):
In file included from ./fatal/type/pair.h:14:0,
from ./fatal/type/list.h:13,
from ./fatal/type/map.h:13,
from ./fatal/type/prefix_tree.h:13,
from fatal/type/benchmark/prefix_tree_benchmark.cpp:10:
./fatal/type/transform.h:1811:48: error: expected template-name before ‘<’
token
using apply = typename with<>::template apply<T>;
^
./fatal/type/transform.h:1811:48: error: expected identifier before ‘<’ token
In file included from ./fatal/type/reflect_template.h:14:0,
from ./fatal/type/reflection.h:14,
from ./fatal/type/prefix_tree.h:14,
from fatal/type/benchmark/prefix_tree_benchmark.cpp:10:
./fatal/type/sequence.h: In static member function ‘static constexpr const
type* fatal::constant_sequence<T, Values>::data()’:
./fatal/type/sequence.h:150:48: error: incomplete type
‘fatal::constant_sequence<T, Values>::array<> {aka fatal::constant_array<T,
Values ...>}’ used in nested name specifier
static constexpr type const *data() { return array<>::data(); }
^
./fatal/type/sequence.h: In static member function ‘static constexpr const
type* fatal::constant_sequence<T, Values>::z_data()’:
./fatal/type/sequence.h:175:50: error: incomplete type
‘fatal::constant_sequence<T, Values>::z_array<> {aka fatal::constant_array<T,
Values ..., static_cast<T>(0)>}’ used in nested name specifier
static constexpr type const *z_data() { return z_array<>::data(); }
^
while it still keeps running afterwards.
perf shows (I only ran it for ~2 minutes):
gcc-4.8
21.48% cc1plus cc1plus [.] comp_template_args_with_info
16.94% cc1plus cc1plus [.] structural_comptypes
8.23% cc1plus cc1plus [.] htab_find_slot_with_hash
7.02% cc1plus cc1plus [.] cp_tree_equal
6.91% cc1plus cc1plus [.] typename_compare
6.72% cc1plus cc1plus [.] eq_specializations
5.39% cc1plus cc1plus [.] cp_type_quals
gcc-4.9
22.90% cc1plus cc1plus [.] structural_comptypes
21.53% cc1plus cc1plus [.] eq_specializations
8.20% cc1plus cc1plus [.] make_typename_type
6.27% cc1plus cc1plus [.] template_args_equal
5.88% cc1plus cc1plus [.] comp_template_args_with_info
5.82% cc1plus cc1plus [.] cp_tree_equal
5.53% cc1plus cc1plus [.] typename_compar
gcc-5
26.96% cc1plus cc1plus [.] make_typename_type
20.37% cc1plus cc1plus [.] template_args_equal
13.03% cc1plus cc1plus [.] structural_comptypes
5.17% cc1plus cc1plus [.] cp_tree_equal
4.43% cc1plus cc1plus [.] tsubst_aggr_type
4.15% cc1plus cc1plus [.] comptypes