From patchwork Sat Jul 31 14:45:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 1511910 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=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=PMPLrPWC; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (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 4GcRsY300vz9sSs for ; Sun, 1 Aug 2021 00:46:09 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 86E11384841A for ; Sat, 31 Jul 2021 14:46:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 86E11384841A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1627742766; bh=Dhzt1K3Z8bDKAZ2s7VFIU6JCfGfLQDjLSXto6k4wdpg=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=PMPLrPWCINk+KcFozxSvfINUJ7uHaCS2CTrojB44jDKRFLkjNinI9Y2PcFNxYRLuk 4+QnhewtvviPbELmCqyVf1hluN5PtgyqjsCStZiR8Q/yGhaudAo0Lcm2jHBhN9UMjs tA0Brcp1Tq+fLGXFxOqqCXZOptk9o/Pommh//mxE= 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 [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 67B593851C37 for ; Sat, 31 Jul 2021 14:45:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 67B593851C37 Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-589-WYhiyQQZOp2Dz7TQoPHPZg-1; Sat, 31 Jul 2021 10:45:21 -0400 X-MC-Unique: WYhiyQQZOp2Dz7TQoPHPZg-1 Received: by mail-qt1-f199.google.com with SMTP id m2-20020ac807c20000b0290269bd8044e1so5959071qth.10 for ; Sat, 31 Jul 2021 07:45:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=Dhzt1K3Z8bDKAZ2s7VFIU6JCfGfLQDjLSXto6k4wdpg=; b=R+bO7dCzvBpz4+J9Hyeu1SUhuz6OZEAulkN4bD1NURQSgZP7mM44kG4L7KbIA6FqYM VJththfwR7u3/J8S2i/1bXSIts3EKkBJO4sDobfElylkxJM+A6ANi3kJAM98WoaYDETX fCAkELfhX+rvDZG8IC6ljQoZYWycgWGF1wvGXd125OBrwyPlxhksOjAjZ8pTpGiEnSiq FpyOBBvjxPHylNrsMCSTENfqdfeLGZfO69OEpfDDS/jOjsBJczwz+/YfMyvdiNHx2Zwl vbyzCDhQbwKXwV8NQ0fglpX1b/uuzljVd7X7D5kQsdAyyVzb1cO+hyD1Lt9QrPviH+Ck X9zA== X-Gm-Message-State: AOAM530Og6OVDa/nFwlafflZl+NzQSGPyf7cIe8DhihwX/MMme7AfNxC TDdVMxcfDjBoMaipyfYGz1q3aVJegqfICBkHMxW0087IRUvlBpc14XXdXg6p72MIiyTMTE6LDyM a3AVUYaPFxMkRM1qxJj/7O+RFUk9h9ZvFMp/97BmFjQTJlO4zTjqx+pfM1/nQhkkOvg== X-Received: by 2002:a05:620a:e81:: with SMTP id w1mr7263743qkm.473.1627742721074; Sat, 31 Jul 2021 07:45:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyiia9CeCMEW3s4/ZyZFni90yIB8kPvlRHFSCbgickWKVjbu6qJEqTs4nM+rlrwa2BpYzv1wA== X-Received: by 2002:a05:620a:e81:: with SMTP id w1mr7263720qkm.473.1627742720798; Sat, 31 Jul 2021 07:45:20 -0700 (PDT) Received: from barrymore.redhat.com (130-44-159-43.s11817.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id j5sm2784601qki.80.2021.07.31.07.45.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 31 Jul 2021 07:45:20 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: ICE on anon struct with base [PR96636] Date: Sat, 31 Jul 2021 10:45:18 -0400 Message-Id: <20210731144518.772167-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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" pinskia pointed out that my recent change to reject anonymous structs with bases was relevant to this PR. But we still ICEd after giving that error; this fixes the ICE. Tested x86_64-pc-linux-gnu, applying to trunk. PR c++/96636 gcc/cp/ChangeLog: * decl.c (fixup_anonymous_aggr): Clear TYPE_NEEDS_CONSTRUCTING after error. gcc/testsuite/ChangeLog: * g++.dg/ext/anon-struct9.C: New test. --- gcc/cp/decl.c | 6 +++++- gcc/testsuite/g++.dg/ext/anon-struct9.C | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ext/anon-struct9.C base-commit: 4c4249b71de3b15ba1e176ce90a57fb7bc54b917 prerequisite-patch-id: 62730bcaf1f07786fd756efb6f3bbd94d778c092 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index e4be6be1819..6fa6b9adc87 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -5094,7 +5094,11 @@ fixup_anonymous_aggr (tree t) tree field, type; if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t))) - error_at (location_of (t), "anonymous struct with base classes"); + { + error_at (location_of (t), "anonymous struct with base classes"); + /* Avoid ICE after error on anon-struct9.C. */ + TYPE_NEEDS_CONSTRUCTING (t) = false; + } for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field)) if (TREE_CODE (field) == FIELD_DECL) diff --git a/gcc/testsuite/g++.dg/ext/anon-struct9.C b/gcc/testsuite/g++.dg/ext/anon-struct9.C new file mode 100644 index 00000000000..56759429620 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/anon-struct9.C @@ -0,0 +1,9 @@ +// PR c++/96636 +// { dg-options "" } + +typedef class { + class a {}; + class : virtual a {}; // { dg-error "anonymous struct with base" } +} b; +void foo(){ b();} +