diff options
author | Jason Merrill <jason@redhat.com> | 2018-04-06 11:12:28 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-04-06 11:12:28 -0400 |
commit | 0c923157ab1522e9d8b2fe8c3dabc6c5cbc35b1d (patch) | |
tree | d5f8ddabc7159df504a33e866042af492bbf4ddc | |
parent | d8ab9ce00a09f3daeea4ad8eea24a385cd7f28f3 (diff) | |
download | gcc-0c923157ab1522e9d8b2fe8c3dabc6c5cbc35b1d.zip gcc-0c923157ab1522e9d8b2fe8c3dabc6c5cbc35b1d.tar.gz gcc-0c923157ab1522e9d8b2fe8c3dabc6c5cbc35b1d.tar.bz2 |
PR c++/85240 - LTO ICE with using of undeduced auto fn.
* cp-gimplify.c (cp_genericize_r): Discard using of undeduced auto.
From-SVN: r259177
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/auto-fn51.C | 9 |
3 files changed, 26 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 759e9c9..71eceaa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2018-04-06 Jason Merrill <jason@redhat.com> + + PR c++/85240 - LTO ICE with using of undeduced auto fn. + * cp-gimplify.c (cp_genericize_r): Discard using of undeduced auto. + 2018-04-05 Jakub Jelinek <jakub@redhat.com> PR c++/85209 diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index fd0c37f..fb0aea3 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -1294,16 +1294,20 @@ cp_genericize_r (tree *stmt_p, int *walk_subtrees, void *data) } if (block) { - tree using_directive; - gcc_assert (TREE_OPERAND (stmt, 0)); + tree decl = TREE_OPERAND (stmt, 0); + gcc_assert (decl); - using_directive = make_node (IMPORTED_DECL); - TREE_TYPE (using_directive) = void_type_node; + if (undeduced_auto_decl (decl)) + /* Omit from the GENERIC, the back-end can't handle it. */; + else + { + tree using_directive = make_node (IMPORTED_DECL); + TREE_TYPE (using_directive) = void_type_node; - IMPORTED_DECL_ASSOCIATED_DECL (using_directive) - = TREE_OPERAND (stmt, 0); - DECL_CHAIN (using_directive) = BLOCK_VARS (block); - BLOCK_VARS (block) = using_directive; + IMPORTED_DECL_ASSOCIATED_DECL (using_directive) = decl; + DECL_CHAIN (using_directive) = BLOCK_VARS (block); + BLOCK_VARS (block) = using_directive; + } } /* The USING_STMT won't appear in GENERIC. */ *stmt_p = build1 (NOP_EXPR, void_type_node, integer_zero_node); diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn51.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn51.C new file mode 100644 index 0000000..7e4f488 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/auto-fn51.C @@ -0,0 +1,9 @@ +// PR c++/85240 +// { dg-do compile { target c++14 } } + +auto foo(); + +void bar() +{ + using ::foo; +} |