From patchwork Fri Jan 21 19:40:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 50333 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E39EA3858400 for ; Fri, 21 Jan 2022 19:41:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E39EA3858400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1642794060; bh=Dgz3XD7I3vNwOxzylnbVUU+T58lqFq/ALcZMlvhsedg=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=bC+IbFOU+4Yg1fpjGNd3kRkbrm8OEMoWvKqSbii2RYV59EdUUie//1Gw9guF1sRt8 8C+7QDabUywozGeqBMGcyE4ZwBbM7TTF8gXhVMo1dwQxG2kEiaihUtFrm3Bxn0DA82 gVuA8TuhTCrtAHDArc3G/4gzhOzLSdotqZtDQrPs= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 30CB73858C60 for ; Fri, 21 Jan 2022 19:40:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 30CB73858C60 Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-590-dEC-2hW4OxaIDL8X-1a3EQ-1; Fri, 21 Jan 2022 14:40:27 -0500 X-MC-Unique: dEC-2hW4OxaIDL8X-1a3EQ-1 Received: by mail-qt1-f200.google.com with SMTP id y1-20020ac87041000000b002c3db9c25f8so7136644qtm.5 for ; Fri, 21 Jan 2022 11:40:27 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=Dgz3XD7I3vNwOxzylnbVUU+T58lqFq/ALcZMlvhsedg=; b=aTZnR4CqQWxQLQV7pPJ7rV8XUTbmM1A5qZ6uR4/nEze0WC/m0rat78T7m9uNnAUoY0 kNkJEwousWIdpCxVfmW1M7+XsOAulfz8MJco+H9botyGS/O/bqyUJfCgXJhIqFN+/TIq Zo3iZZM3viDgJ+bd7UMSBkpOS8Gw6BsG1GepvwrjrE/yJYj/OYbGbJ+guaxbv60yD4Cm oazmNhtF8SMh2Nn3LjFM1QOtCZlFl2T77FGQtvzziyYZzXrqjag7+cAcSm1LIMkeRijt OPMOCf7tSQqRU1hQoKZ6fuYbQnhYQ6KwJsZZmDso/ioFuQ1YQ9+xZafLuVSEuz0Q6Y37 itCg== X-Gm-Message-State: AOAM531IaIuM4Pjqq+jB87X7Re87hRp/DQl8tmEVAccGw19jDGYNFeqM QYuFQG3MWwIwIH1djbI6b8JoN5dYMrMFZ6TOPhKgk1j9XcRq2X8wFoYYQznMQPz8s2mm8JO68w4 02epKXZ1Qnw6pdPFQSu5QYzIAlJ0AkUoJNwjGBcoQhS+j9P19lkbyLpNtQXI7yOSnfA== X-Received: by 2002:a05:622a:11d2:: with SMTP id n18mr4546061qtk.514.1642794026805; Fri, 21 Jan 2022 11:40:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJyPp8tMByGksU3D2EW4G4tlY9eKsJ3hNYdjaofzZdZUDaKN2canSqtLLBZUJsCbG5Huy6b9Wg== X-Received: by 2002:a05:622a:11d2:: with SMTP id n18mr4546046qtk.514.1642794026343; Fri, 21 Jan 2022 11:40:26 -0800 (PST) Received: from barrymore.redhat.com (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id n12sm3317348qta.5.2022.01.21.11.40.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Jan 2022 11:40:25 -0800 (PST) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: class array new checking [PR104084] Date: Fri, 21 Jan 2022 14:40:23 -0500 Message-Id: <20220121194023.560942-1-jason@redhat.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: , X-Patchwork-Original-From: Jason Merrill via Gcc-patches From: Jason Merrill Reply-To: Jason Merrill Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" My patch for PR20040 made us stop exiting early from build_new_1 in cases of trivial initialization if there's a class operator delete; as a result, code later in the function needs to handle this case properly. Tested x86_64-pc-linux-gnu, applying to trunk. PR c++/104084 PR c++/20040 gcc/cp/ChangeLog: * init.cc (build_new_1): Only pull out TARGET_EXPR_INITIAL if alloc_expr is a TARGET_EXPR. gcc/testsuite/ChangeLog: * g++.dg/init/new50.C: New test. --- gcc/cp/init.cc | 2 +- gcc/testsuite/g++.dg/init/new50.C | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/init/new50.C base-commit: c163647ffbc9a20c8feb6e079dbecccfe016c82e diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index 668a84d969e..1f047831b6d 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -3786,7 +3786,7 @@ build_new_1 (vec **placement, tree type, tree nelts, if (cookie_expr) rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), cookie_expr, rval); - if (rval == data_addr) + if (rval == data_addr && TREE_CODE (alloc_expr) == TARGET_EXPR) /* If we don't have an initializer or a cookie, strip the TARGET_EXPR and return the call (which doesn't need to be adjusted). */ rval = TARGET_EXPR_INITIAL (alloc_expr); diff --git a/gcc/testsuite/g++.dg/init/new50.C b/gcc/testsuite/g++.dg/init/new50.C new file mode 100644 index 00000000000..981d23106f3 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/new50.C @@ -0,0 +1,9 @@ +// PR c++/104084 + +int nothrow; +struct MaxAlignedAllocable { + void *operator new[](__SIZE_TYPE__, int); + void operator delete[](void *); + long Resize_size; + void Resize() { new (nothrow) MaxAlignedAllocable[Resize_size]; } +};