From patchwork Tue May 9 20:37:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 760324 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wMrm01HG9z9rxl for ; Wed, 10 May 2017 06:37:51 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="wql7E7pO"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:content-type; q= dns; s=default; b=ooa2suAvaTfZRg9IXgmZLSiBdSaCePaIta9OJrdhEoBRJY a3gnrKDLQRLGeVFuzhqs7K7HjL673vBkUGSVIrhFNa1nWnW+/qtJk34bG0PAmf1k 7Vsc5ks6zJ+KLFJSul9Sjf1d5XVB+ciNpA8tOVLJVDJXhcGxnvSNPBJJg04aE= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:content-type; s= default; bh=48KeUcobDt1notgUDGm5rSpbCX4=; b=wql7E7pO4Dh727jhLfNZ DyWfychXcmMNTxpcPhqRy0SrqAZR9SigIweqtePb+qUcQuWzdGOsgQANHf3qYd5H cElZlIr++fXqRIkdqz36oIMdX93O4EDN6Y4AZP5D8/9CPrWcrMi6fQI1vabrxW3t I4u/mHf3txmGigBZVF5VwaE= Received: (qmail 59465 invoked by alias); 9 May 2017 20:37:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 59448 invoked by uid 89); 9 May 2017 20:37:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.2 spammy= X-HELO: mail-io0-f172.google.com Received: from mail-io0-f172.google.com (HELO mail-io0-f172.google.com) (209.85.223.172) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 09 May 2017 20:37:36 +0000 Received: by mail-io0-f172.google.com with SMTP id p24so1487861ioi.0 for ; Tue, 09 May 2017 13:37:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=S3ZeZBgF1S+XC+GQUYrNGjRD010mW4QmJuB39DVmXH4=; b=fqrvgU29iZjUQf6N24qqdWeP7TKBdg0+w1S+yMBflK02qisyb+hy5uLHmqlmfJN4mg Un7Q3OyfqQR/XBkogRQ5EVNeSHqbCrFvCU3BOdsWMGiUSjSrnrXSvbIwUIm0kO+XJ0W5 p2WPb6OWf9MICRZ4dNd1Ie96jHBjgKtJTAuBqe5lpiM4NHbNgmInq/IqiDmUMV97PwtJ /QzyMMljPnKwZmiqeWyvn9PYvvvqGGbcTDaXqu84bnr1JR6FuBaQpYjymnL99Qu8OFQA nGa5SDpsGHcgphqaQls9yBLYrnOoOMxQwzEnfvW6qWq9Q+mLOP39mhRlExWdm26Kzh4L w7Xw== X-Gm-Message-State: AODbwcBDualeQfjXQP6Gm1vcFKqQoH0J+kTashie2TPFYbaHybgU6kJ5 926PI4nGtGp4ugqvST3dGbv02yNQIOoqVpQ= X-Received: by 10.107.6.218 with SMTP id f87mr333475ioi.2.1494362257574; Tue, 09 May 2017 13:37:37 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.6.226 with HTTP; Tue, 9 May 2017 13:37:16 -0700 (PDT) From: Jason Merrill Date: Tue, 9 May 2017 16:37:16 -0400 Message-ID: Subject: C++ PATCH for testsuite failures with -std=c++17 To: gcc-patches List X-IsSubscribed: yes For C++17 aggregate bases, we have started adding base fields for empty bases. The code for calculating whether a class is standard layout needs to ignore these. The C++17 mode diagnostic for direct-enum-init1.C was incorrect. Tested x86_64-pc-linux-gnu, applying to trunk. commit 9a612cc30d4b3ef905ce45304545d8b99a3cf5b9 Author: Jason Merrill Date: Tue May 9 14:15:38 2017 -0400 * class.c (check_bases): Ignore empty bases. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index fc71766..085dbc3 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -1860,7 +1860,9 @@ check_bases (tree t, members */ for (basefield = TYPE_FIELDS (basetype); basefield; basefield = DECL_CHAIN (basefield)) - if (TREE_CODE (basefield) == FIELD_DECL) + if (TREE_CODE (basefield) == FIELD_DECL + && DECL_SIZE (basefield) + && !integer_zerop (DECL_SIZE (basefield))) { if (field) CLASSTYPE_NON_STD_LAYOUT (t) = 1; diff --git a/gcc/testsuite/g++.dg/ext/is_std_layout1.C b/gcc/testsuite/g++.dg/ext/is_std_layout1.C new file mode 100644 index 0000000..007c94a --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_std_layout1.C @@ -0,0 +1,12 @@ +// { dg-do compile { target c++11 } } + +template struct E { }; + +struct E1: E<0>, E<1> { }; +struct E2: E<2>, E<3> { }; + +struct A1x { int n; }; +struct D2: A1x, E1, E2 { }; + +#define SA(X) static_assert((X),#X) +SA(__is_standard_layout (D2)); commit 90bdd7df4aa641d53edacd20414d724babfe4af8 Author: Jason Merrill Date: Tue May 9 13:51:07 2017 -0400 * g++.dg/cpp1z/direct-enum-init1.C: Correct error message. diff --git a/gcc/testsuite/g++.dg/cpp1z/direct-enum-init1.C b/gcc/testsuite/g++.dg/cpp1z/direct-enum-init1.C index a17473f..11269cc 100644 --- a/gcc/testsuite/g++.dg/cpp1z/direct-enum-init1.C +++ b/gcc/testsuite/g++.dg/cpp1z/direct-enum-init1.C @@ -22,7 +22,7 @@ foo () C c1 { s }; D d1 { D(t) }; // { dg-error "invalid cast from type 'T' to type 'D {enum}'" } D d2 { t }; // { dg-error "cannot convert 'T' to 'D {enum}' in initialization" "" { target c++14_down } } - // { dg-error "invalid cast from type 'T' to type 'D'" "" { target c++1z } .-1 } + // { dg-error "invalid cast from type 'T' to type 'D {enum}'" "" { target c++1z } .-1 } D d3 { 9 }; // { dg-error "cannot convert 'int' to 'D {enum}' in initialization" "" { target c++14_down } } D d4 { l }; // { dg-error "cannot convert 'long int' to 'D {enum}' in initialization" "" { target c++14_down } } D d5 { D(l) }; @@ -89,7 +89,7 @@ foo2 () C c1 { s }; D d1 { D(t) }; // { dg-error "invalid cast from type 'T' to type 'D {enum}'" } D d2 { t }; // { dg-error "cannot convert 'T' to 'D {enum}' in initialization" "" { target c++14_down } } - // { dg-error "invalid cast from type 'T' to type 'D'" "" { target c++1z } .-1 } + // { dg-error "invalid cast from type 'T' to type 'D {enum}'" "" { target c++1z } .-1 } D d3 { 9 }; // { dg-error "cannot convert 'int' to 'D {enum}' in initialization" "" { target c++14_down } } D d4 { l }; // { dg-error "cannot convert 'long int' to 'D {enum}' in initialization" "" { target c++14_down } } D d5 { D(l) };