diff options
author | Jason Merrill <jason@redhat.com> | 2018-04-06 15:12:28 +0000 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2018-04-06 15:12:28 +0000 |
commit | 9b36465f8d681b576cb698fcca8c292d9dc6d7c8 (patch) | |
tree | d5f8ddabc7159df504a33e866042af492bbf4ddc /gcc/cp/cp-gimplify.c | |
parent | 1f5dd1ba90315276e2c3344ec4d749e36918dd5b (diff) |
PR c++/85240 - LTO ICE with using of undeduced auto fn.
* cp-gimplify.c (cp_genericize_r): Discard using of undeduced auto.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@259177 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/cp-gimplify.c')
-rw-r--r-- | gcc/cp/cp-gimplify.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index fd0c37f9be2..fb0aea3e0c7 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); |