aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/cp-gimplify.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2018-04-06 15:12:28 +0000
committerJason Merrill <jason@redhat.com>2018-04-06 15:12:28 +0000
commit9b36465f8d681b576cb698fcca8c292d9dc6d7c8 (patch)
treed5f8ddabc7159df504a33e866042af492bbf4ddc /gcc/cp/cp-gimplify.c
parent1f5dd1ba90315276e2c3344ec4d749e36918dd5b (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.c20
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);