From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id 252C03858C52; Mon, 11 Mar 2024 10:22:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 252C03858C52 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1710152569; bh=kioVNM08mEePvZZZ32kWIVOB4Kr7I4APWxpXEdSveQs=; h=From:To:Subject:Date:From; b=G7KQxAfzJpmyesbj2hCmy0d8lqJAM+JvQOj6Nq6PNjPenMiAagB054fSEjFpRpJUm ir86Qk+zJbrS98x3gSy8Ub9k5WRiGOjGG7aOl2SX61MGB57rUjCbyUwJnleHQxwVw+ WOjn9Y1IEFxIVjfaJmzh8HlWx8bCQftVCPCGdY3o= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-9425] middle-end/114299 - missing error recovery from gimplify failure X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/master X-Git-Oldrev: dbe5ccda4dbbd064c703cd3ab2a58ea40f08dd1a X-Git-Newrev: 119f5ae0455f02568159eafa9008a555605e7d71 Message-Id: <20240311102249.252C03858C52@sourceware.org> Date: Mon, 11 Mar 2024 10:22:49 +0000 (GMT) List-Id: https://gcc.gnu.org/g:119f5ae0455f02568159eafa9008a555605e7d71 commit r14-9425-g119f5ae0455f02568159eafa9008a555605e7d71 Author: Richard Biener Date: Mon Mar 11 09:35:07 2024 +0100 middle-end/114299 - missing error recovery from gimplify failure When internal_get_tmp_var fails to gimplify the value the temporary SSA name is supposed to be initialized with we can leak SSA names with a NULL SSA_NAME_DEF_STMT into the IL. That's bad, so recover from this by instead returning a decl in that case. PR middle-end/114299 * gimplify.cc (internal_get_tmp_var): When gimplification of VAL failed, return a decl. * gcc.target/i386/pr114299.c: New testcase. Diff: --- gcc/gimplify.cc | 5 +++++ gcc/testsuite/gcc.target/i386/pr114299.c | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc index 6ebca964cb2..d64bbf3ffbd 100644 --- a/gcc/gimplify.cc +++ b/gcc/gimplify.cc @@ -652,6 +652,11 @@ internal_get_tmp_var (tree val, gimple_seq *pre_p, gimple_seq *post_p, gimplify_and_add (mod, pre_p); ggc_free (mod); + /* If we failed to gimplify VAL then we can end up with the temporary + SSA name not having a definition. In this case return a decl. */ + if (TREE_CODE (t) == SSA_NAME && ! SSA_NAME_DEF_STMT (t)) + return lookup_tmp_var (val, is_formal, not_gimple_reg); + return t; } diff --git a/gcc/testsuite/gcc.target/i386/pr114299.c b/gcc/testsuite/gcc.target/i386/pr114299.c new file mode 100644 index 00000000000..b4f30b7a95f --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr114299.c @@ -0,0 +1,14 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-options "-mgeneral-regs-only" } */ + +typedef __attribute__((__vector_size__(8))) __bf16 V; +typedef __attribute__((__vector_size__(16))) __bf16 W; + +V v; +_Atomic V a; + +W +foo(void) /* { dg-error "SSE" } */ +{ + return __builtin_shufflevector(v, a, 1, 2, 5, 0, 1, 6, 6, 4); /* { dg-error "invalid" } */ +}