http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58550
Bug ID: 58550 Summary: [4.9 Regression] ][c++0x] ICE with auto in function return type and lto Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: reichelt at gcc dot gnu.org The following (probably invalid) code snippet triggers an ICE on trunk (4.9.0 20130926) when compiled with "std=c++0x -flto": ==================== auto foo(); auto fp = foo; ==================== bug.cc:1:10: warning: 'foo' function uses 'auto' type specifier without trailing return type [enabled by default] auto foo(); ^ bug.cc:3:14: internal compiler error: tree code 'template_type_parm' is not supported in LTO streams auto fp = foo; ^ 0xa17696 DFS_write_tree ../../gcc/gcc/lto-streamer-out.c:1244 0xa165c9 DFS_write_tree_body ../../gcc/gcc/lto-streamer-out.c:461 0xa165c9 DFS_write_tree ../../gcc/gcc/lto-streamer-out.c:1152 0xa165c9 DFS_write_tree_body ../../gcc/gcc/lto-streamer-out.c:461 0xa165c9 DFS_write_tree ../../gcc/gcc/lto-streamer-out.c:1152 0xa18907 lto_output_tree(output_block*, tree_node*, bool, bool) ../../gcc/gcc/lto-streamer-out.c:1334 0xa12cfc write_global_stream ../../gcc/gcc/lto-streamer-out.c:2084 0xa1a990 lto_output_decl_state_streams ../../gcc/gcc/lto-streamer-out.c:2128 0xa1a990 produce_asm_for_decls ../../gcc/gcc/lto-streamer-out.c:2413 0xa4e720 ipa_write_summaries_2 ../../gcc/gcc/passes.c:2283 0xa4f799 ipa_write_summaries_1 ../../gcc/gcc/passes.c:2314 0xa4f799 ipa_write_summaries() ../../gcc/gcc/passes.c:2371 0x807c5b ipa_passes ../../gcc/gcc/cgraphunit.c:2019 0x807c5b compile() ../../gcc/gcc/cgraphunit.c:2115 0x807ee9 finalize_compilation_unit() ../../gcc/gcc/cgraphunit.c:2269 0x61b2b0 cp_write_global_declarations() ../../gcc/gcc/cp/decl2.c:4360 Please submit a full bug report, [etc.] In GCC 4.8.1 the code was rejected: bug.cc:1:10: warning: 'foo' function uses 'auto' type specifier without trailing return type [enabled by default] auto foo(); ^ bug.cc:3:11: error: use of 'auto foo()' before deduction of 'auto' auto fp = foo;