From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 E5D25384475E for ; Tue, 25 Jun 2024 11:15:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E5D25384475E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E5D25384475E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1719314148; cv=none; b=UVtc5vCv7UwWmchhmzWRte11j3RTtCPA2aoG9kwfs+pygdShpefMO4wLIkMbI0HVpQT2A40oqzbjunpBeDbT3Yhx16S0HSOPIOU03YaQHaYU4ZHoII84ZbLG9/qnw8nbHjfVHhP7ne/3P1dde06QgKEfhrp7eOVUP0Dwkbn6jXg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1719314148; c=relaxed/simple; bh=qrV/7AGc09lCsgc5Kn4RK9JlH2My+Ct524tLlsTY+mA=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=xpTuZ8XbcXL8rglGYXVK3R9Gg/sYl6sgOVpX+2GDgccUjHFudiXxlvqTmyEgfa27GXEc3cDlrcIVlRZsFlEXqjw8FaOcbMV/zkuAMkPteBLnvaNtD8gt07el5wjI7uWe7dQxhcG5ppjkNP9DBQ4j5qFe3GD3B2g6Z+d9HOOecMI= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1719314145; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=MU0TRss+RwBT9Wz0jui04XOIV5kFrSezhMnEWB1h8IE=; b=FpBdXkG1Ycgp41wxBMLWCSuKifqojA2GsvhDFOPnfqIQc3mix2VqJ5Rub0kix+vFHUA/hF nLphyEIg3YWDJLpb8YsvD+I3zscIdx79rDo+CYnkwi7SIx27GSsQqF7+9zOaqeTPMe77qb AXYp/FEPda5Nzz9qeXcsU5OFByDCRzU= Received: from mail-yw1-f199.google.com (mail-yw1-f199.google.com [209.85.128.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-502-bICW7fRuO4SXcMq05vdwsw-1; Tue, 25 Jun 2024 07:15:44 -0400 X-MC-Unique: bICW7fRuO4SXcMq05vdwsw-1 Received: by mail-yw1-f199.google.com with SMTP id 00721157ae682-64507372362so53057887b3.1 for ; Tue, 25 Jun 2024 04:15:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719314144; x=1719918944; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MU0TRss+RwBT9Wz0jui04XOIV5kFrSezhMnEWB1h8IE=; b=pYtbkB6BbiKPQ8h7nU1L4BW9ERSjyF/tGGREdexg6ydQp9K1wWcUbs2HDT8Qnrz8Lp U7ffqz6tC3UnA7uNu15Idtl+2KEzRXki4lGrjjLOUppwknFjo/PSMvGYPqUu+5TAsPnm xYOGcNHWbJ40KJ6arLxVlGESfV9jtrJJ1eNosnojOD+0S6KweqAlch1/0+Up11W2goFU wZFVCB8bqR7sxO3qgmmQBB63u9Gj4kfO2kuqzyTbZ8Rv7RBuuw5nstFjTsXFS+eoSWAm QLIckAGF+KHJgWbX209UW5jkEDuSogiynOTMtkcVmvRx8WUNZ8rRdBvJYZrZnDVzaTGz CjOw== X-Forwarded-Encrypted: i=1; AJvYcCWAT0hMK9dAaNt21pI0ogAb2rYi8MONY1L8Y3fZJ1r727zZL951GHp30BaRGNx+3DqfkzOXNIbrZD2kdG25MdI80V3tdl/5Mg== X-Gm-Message-State: AOJu0YzS4lUHClut6Un4esofDw1y8p6kczNtdKJvxoI9OAC9Wmfkn1og CXa0Mp3yP7T9azc9WIpOjDu50TPiM/B3ah53bObPI6253JbK2QFfUVXGhXjy+tX4UyWnwKK0miM lXvtxNSsM0ONP9H3xjLSKoGlPO3W7/mM0ajodUQGje92ok0F9sg0bheZBMcFoPXOCJY/rd7ExaP z33Fw+XM113+YjEE3ZyrUqF1zJmk31+A== X-Received: by 2002:a0d:d650:0:b0:61b:eb65:4a87 with SMTP id 00721157ae682-6429d458b86mr66162397b3.48.1719314143791; Tue, 25 Jun 2024 04:15:43 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG2MJ7Xjj2hqvMb9ge1RmewUFfpS97stnUw5d2hZMmXVQLDbdrL2jzdSjp8Whc2YqguoY8LLS8DkOL0tbFJvX0= X-Received: by 2002:a0d:d650:0:b0:61b:eb65:4a87 with SMTP id 00721157ae682-6429d458b86mr66162187b3.48.1719314143436; Tue, 25 Jun 2024 04:15:43 -0700 (PDT) MIME-Version: 1.0 References: <20240618143157.31204-1-polacek@redhat.com> In-Reply-To: From: Jonathan Wakely Date: Tue, 25 Jun 2024 12:15:27 +0100 Message-ID: Subject: Re: [PATCH] c++: ICE with __has_unique_object_representations [PR115476] To: Jason Merrill Cc: Marek Polacek , GCC Patches X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Tue, 25 Jun 2024 at 03:12, Jason Merrill wrote: > > On 6/18/24 10:31, Marek Polacek wrote: > > Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk/14/13? > > Makes sense to me, though probably the [meta.unary.prop] table should be > adjusted in the same way. Jonathan, what do you think? Just to make sure I understand correctly, the suggestion is to change the precondition for the trait to something like: "remove_all_extents_t shall be a complete type or cv void." i.e. if T is incomplete then T[] cannot be used with the trait, right? > > > -- >8 -- > > Here we started to ICE with r13-25: in check_trait_type, for "X[]" we > > return true here: > > > > if (kind == 1 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)) > > return true; // Array of unknown bound. Don't care about completeness. > > > > and then end up crashing in record_has_unique_obj_representations: > > > > 4836 if (cur != wi::to_offset (sz)) > > > > because sz is null. > > > > https://eel.is/c++draft/type.traits#tab:meta.unary.prop-row-47-column-3-sentence-1 > > says that the preconditions for __has_unique_object_representations are: > > "T shall be a complete type, cv void, or an array of unknown bound" and > > that "For an array type T, the same result as > > has_unique_object_representations_v>" so T[] > > should be treated as T. So we should use kind==2 for the trait. > > > > PR c++/115476 > > > > gcc/cp/ChangeLog: > > > > * semantics.cc (finish_trait_expr) > > : Move below to call > > check_trait_type with kind==2. > > > > gcc/testsuite/ChangeLog: > > > > * g++.dg/cpp1z/has-unique-obj-representations4.C: New test. > > --- > > gcc/cp/semantics.cc | 2 +- > > .../cpp1z/has-unique-obj-representations4.C | 16 ++++++++++++++++ > > 2 files changed, 17 insertions(+), 1 deletion(-) > > create mode 100644 gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations4.C > > > > diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc > > index 08f5f245e7d..42251b6764b 100644 > > --- a/gcc/cp/semantics.cc > > +++ b/gcc/cp/semantics.cc > > @@ -12966,7 +12966,6 @@ finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2) > > case CPTK_HAS_NOTHROW_COPY: > > case CPTK_HAS_TRIVIAL_COPY: > > case CPTK_HAS_TRIVIAL_DESTRUCTOR: > > - case CPTK_HAS_UNIQUE_OBJ_REPRESENTATIONS: > > if (!check_trait_type (type1)) > > return error_mark_node; > > break; > > @@ -12976,6 +12975,7 @@ finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2) > > case CPTK_IS_STD_LAYOUT: > > case CPTK_IS_TRIVIAL: > > case CPTK_IS_TRIVIALLY_COPYABLE: > > + case CPTK_HAS_UNIQUE_OBJ_REPRESENTATIONS: > > if (!check_trait_type (type1, /* kind = */ 2)) > > return error_mark_node; > > break; > > diff --git a/gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations4.C b/gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations4.C > > new file mode 100644 > > index 00000000000..d6949dc7005 > > --- /dev/null > > +++ b/gcc/testsuite/g++.dg/cpp1z/has-unique-obj-representations4.C > > @@ -0,0 +1,16 @@ > > +// PR c++/115476 > > +// { dg-do compile { target c++11 } } > > + > > +struct X; > > +static_assert(__has_unique_object_representations(X), ""); // { dg-error "invalid use of incomplete type" } > > +static_assert(__has_unique_object_representations(X[]), ""); // { dg-error "invalid use of incomplete type" } > > +static_assert(__has_unique_object_representations(X[1]), ""); // { dg-error "invalid use of incomplete type" } > > +static_assert(__has_unique_object_representations(X[][1]), ""); // { dg-error "invalid use of incomplete type" } > > + > > +struct X { > > + int x; > > +}; > > +static_assert(__has_unique_object_representations(X), ""); > > +static_assert(__has_unique_object_representations(X[]), ""); > > +static_assert(__has_unique_object_representations(X[1]), ""); > > +static_assert(__has_unique_object_representations(X[][1]), ""); > > > > base-commit: 7f9be55a4630134a237219af9cc8143e02080380 >