From patchwork Mon Feb 1 09:38:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kito Cheng X-Patchwork-Id: 1434079 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=hpCbWDkd; dkim-atps=neutral Received: from sourceware.org (unknown [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DTjZG0Z06z9tl9 for ; Mon, 1 Feb 2021 20:39:02 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3E7C738708D0; Mon, 1 Feb 2021 09:38:59 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by sourceware.org (Postfix) with ESMTPS id 5ED1B38708D0 for ; Mon, 1 Feb 2021 09:38:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5ED1B38708D0 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=kito.cheng@sifive.com Received: by mail-pj1-x1030.google.com with SMTP id my11so9317182pjb.1 for ; Mon, 01 Feb 2021 01:38:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=MexryYsUohV7m1G/nYPPsWDTavDj/Gx10jFR77DAo2U=; b=hpCbWDkd50P7UoQ0+v6HxfbNsZIT5W4qRTPHWo8luKCyX88x62+CMlSXhI7qZf8HRi vb+sP/6QRMXNFwypnPmU/YethELKJTBJLq8TEjnUoFHb/B2fUuc4Y3uqeZvTLVHavaLB KqCajmfpi3GQKcqZDWvjvR0m4Pcoge8UShxYlQupibrt0LXWsnCFEHm2P7igV2FL1gBu vco5kprKULF0wnCZkO7bUo442dCodISDdNwn9JpqRTqH8h8Ewrh+udwEn5gySYKOB6Z9 ssb8yyr6DcK0pxCntY2026XfRyt8vnNM0QIaReOXXpoNBDbypJfvew5gllDAnUmWvjMU ZtfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=MexryYsUohV7m1G/nYPPsWDTavDj/Gx10jFR77DAo2U=; b=MSGpMoZMpU9K4wEgUpUnTOU+kH0vnfd1O5adMZ9qCwzVA6R5Hecidy8MHzVTlG4y/P XIkKFT7pe8IPuH2WVlrbl/LtqgjT+ZV6LjmBjk2jQdSiNwQUnnhFhv4lRbYZGmdWinTJ +z4hpSnTgmi3dZ/mU3FYPyF5Adky+/ynoblcNEpzvp6JNzWs5uzsBkrppm5AWLP5sANj zchB2C9A/VyQymscxRXEC2EXv7ljcvYkcIkx3cKsvVEg3xCa6y3R1wXtxzGUi0NBVnN7 RwT/oHttrBafQX9YYsQ8gnjU8EOluNpYsQYg3a2n3hOqmmCfxMoDHjAnHh6BP2XQjxGz R9FA== X-Gm-Message-State: AOAM5308B2FHIFSCeF4DjR4dznXJPlhf2eZSSS+CQId6Yk/a5Hs7Nv+Z fj8uxpgqZWDv2WJq8kxkSQQzagfsNs/QZeYBXCw= X-Google-Smtp-Source: ABdhPJz2kYKjv3xZLDKUuuzRaRapWf/8jIeIH411axa+/J7lTmeMdu6UG5hX5yVv70sE1yOYDDcyVQ== X-Received: by 2002:a17:902:7596:b029:da:b7a3:cdd0 with SMTP id j22-20020a1709027596b02900dab7a3cdd0mr16933973pll.14.1612172335030; Mon, 01 Feb 2021 01:38:55 -0800 (PST) Received: from hsinchu02.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id b203sm17841047pfb.11.2021.02.01.01.38.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Feb 2021 01:38:54 -0800 (PST) From: Kito Cheng To: gcc-patches@gcc.gnu.org, kito.cheng@gmail.com, jimw@sifive.com, marxin@gcc.gnu.org, jakub@redhat.com Subject: [PATCH] PR target/98743: Fix ICE in convert_move for RISC-V Date: Mon, 1 Feb 2021 17:38:46 +0800 Message-Id: <20210201093846.10975-1-kito.cheng@sifive.com> X-Mailer: git-send-email 2.30.0 MIME-Version: 1.0 X-Spam-Status: No, score=-14.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kito Cheng Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" - Check `TO` mode is not BLMmode before call store_expr, calling store_expr with BLKmode will cause ICE. - Verified with riscv64, x86_64 and aarch64, no introduce new regression. Note: Those logic was introduced by 3e60ddeb8220ed388819bb3f14e8caa9309fd3c2, so I cc Jakub for reivew. gcc/ChangeLog: PR target/98743 * expr.c: Check mode before calling store_expr. gcc/testsuite/ChangeLog: PR target/98743 * g++.target/riscv/pr98743.C: New. --- gcc/expr.c | 1 + gcc/testsuite/g++.target/riscv/pr98743.C | 27 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 gcc/testsuite/g++.target/riscv/pr98743.C diff --git a/gcc/expr.c b/gcc/expr.c index 04ef5ad114d..3cf492acea3 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -5459,6 +5459,7 @@ expand_assignment (tree to, tree from, bool nontemporal) /* If to_rtx is a promoted subreg, we need to zero or sign extend the value afterwards. */ if (TREE_CODE (to) == MEM_REF + && mode != BLKmode && !REF_REVERSE_STORAGE_ORDER (to) && known_eq (bitpos, 0) && known_eq (bitsize, GET_MODE_BITSIZE (GET_MODE (to_rtx)))) diff --git a/gcc/testsuite/g++.target/riscv/pr98743.C b/gcc/testsuite/g++.target/riscv/pr98743.C new file mode 100644 index 00000000000..1b94597ac68 --- /dev/null +++ b/gcc/testsuite/g++.target/riscv/pr98743.C @@ -0,0 +1,27 @@ +// Test for value-initialization via {} +// { dg-do run { target c++11 } } +/* { dg-options "-Og -version -fno-early-inlining -finline-small-functions -fpack-struct" */ +void * operator new (__SIZE_TYPE__, void *p) { return p; } +void * operator new[] (__SIZE_TYPE__, void *p) { return p; } + +// Empty base so A isn't an aggregate +struct B {}; +struct A: B { + int i; +}; + +struct C: A { + C(): A{} {} +}; + +int main() +{ + int space = 42; + A* ap = new (&space) A{}; + int space1[1] = { 42 }; + A* a1p = new (space1) A[1]{}; + if (ap->i != 0 || + a1p[0].i != 0) + return 1; + return 0; +}