https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87830
Bug ID: 87830 Summary: [9 Regression] ICE in cp_var_mod_type_p at cp/cp-objcp-common.c:107 since r265638 Product: gcc Version: 9.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: lto Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org CC: marxin at gcc dot gnu.org Target Milestone: --- Following code (isolated from Libreoffice) causes ICE: $ cat ice.ii template <typename a> void ap(a); template <typename, typename> struct b { template <typename at> b(at); }; void av(); template <typename a, typename... ah> void aw(a, ah... ay) { auto az = [&] { ap(ay...); }; (*(decltype(az) *)av)(); } class e { void be(); public: template <typename bl, typename bm> void bn(b<bl, bm>) { aw(c, &e::be); } int c; } d; void bq() { d.bn(b<long, int>(1)); } $ g++ -O -flto ice.ii -c during GIMPLE pass: einline ice.ii: In function ‘aw<int, void (e::*)()>(int, void (e::*)())void’: ice.ii:6:24: internal compiler error: Segmentation fault 6 | (*(decltype(az) *)av)(); | ~~~~~~~~~~~~~~~~~~~~~^~ 0xb8852f crash_signal ../../gcc/toplev.c:325 0x63228c cp_var_mod_type_p(tree_node*, tree_node*) ../../gcc/cp/cp-objcp-common.c:107 0xdc7a73 variably_modified_type_p(tree_node*, tree_node*) ../../gcc/tree.c:9065 0xdc7f0d variably_modified_type_p(tree_node*, tree_node*) ../../gcc/tree.c:9006 0xbede4c remap_type(tree_node*, copy_body_data*) ../../gcc/tree-inline.c:600 0xbf320c copy_tree_body_r(tree_node**, int*, void*) ../../gcc/tree-inline.c:1304 0xdc6f65 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*)) ../../gcc/tree.c:11632 0xdc750e walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*)) ../../gcc/tree.c:11950 0xbee1a6 remap_decls ../../gcc/tree-inline.c:683 0xbef021 remap_block ../../gcc/tree-inline.c:714 0xbef0f1 remap_blocks ../../gcc/tree-inline.c:736 0xbf5142 expand_call_inline ../../gcc/tree-inline.c:4605 0xbf6904 gimple_expand_calls_inline ../../gcc/tree-inline.c:4886 0xbf6904 optimize_inline_calls(tree_node*) ../../gcc/tree-inline.c:5026 0x12e08c1 early_inliner(function*) ../../gcc/ipa-inline.c:2797