From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2049) id F1EFC385842B; Fri, 1 Oct 2021 09:17:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F1EFC385842B Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Matthew Malcomson To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/vendors/ARM/heads/morello)] Implement build_zero_cst for INTCAP_TYPE X-Act-Checkin: gcc X-Git-Author: Matthew Malcomson X-Git-Refname: refs/vendors/ARM/heads/morello X-Git-Oldrev: 8e81ac941753958ccaf91bae3c9b6980b0803624 X-Git-Newrev: 2f2de95f4482dbd28440deb337b226b24b193843 Message-Id: <20211001091703.F1EFC385842B@sourceware.org> Date: Fri, 1 Oct 2021 09:17:03 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Oct 2021 09:17:04 -0000 https://gcc.gnu.org/g:2f2de95f4482dbd28440deb337b226b24b193843 commit 2f2de95f4482dbd28440deb337b226b24b193843 Author: Matthew Malcomson Date: Tue Sep 21 16:01:59 2021 +0100 Implement build_zero_cst for INTCAP_TYPE This does the same thing as a POINTER_TYPE, which means we don't fall through to the default of trying to convert `integer_zero_node` to the type we want. Also add a testcase where this missing implementation triggered an ICE. Diff: --- gcc/testsuite/gcc.target/aarch64/morello/sra-modify-assign.c | 11 +++++++++++ gcc/tree.c | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.target/aarch64/morello/sra-modify-assign.c b/gcc/testsuite/gcc.target/aarch64/morello/sra-modify-assign.c new file mode 100644 index 00000000000..3a6846f5061 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/morello/sra-modify-assign.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* This testcase would trigger an ICE since the `esra` pass would attempt to + zero initialise the decomposed structure with `build_zero_cst` which was not + implemented for INTCAP_TYPE at the time. */ +struct a { + long b; + __uintcap_t c; +} d(int e) { + struct a a = {.c = e}; + return a; +} diff --git a/gcc/tree.c b/gcc/tree.c index 6a002a4708c..4b4f4fc3e61 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -2421,7 +2421,7 @@ build_zero_cst (tree type) switch (TREE_CODE (type)) { case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE: - case POINTER_TYPE: case REFERENCE_TYPE: + case POINTER_TYPE: case REFERENCE_TYPE: case INTCAP_TYPE: case OFFSET_TYPE: case NULLPTR_TYPE: return build_int_cst (type, 0);