From patchwork Wed May 6 18:18:06 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 134577 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7BDD14BA23DE for ; Wed, 6 May 2026 18:20:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7BDD14BA23DE Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=ICROI9Cc 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.129.124]) by sourceware.org (Postfix) with ESMTP id 77B3E4BA23CC for ; Wed, 6 May 2026 18:20:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 77B3E4BA23CC Authentication-Results: sourceware.org; dmarc=pass (p=quarantine 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 77B3E4BA23CC Authentication-Results: sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778091611; cv=none; b=l7CxamegUy0lVvTjzoW5jzFJonvTTOfo9spN4qSPApJMfgDWm99EGjClHhc5hlNsIThSP9Ww2tqP5HZqsZWJhA4I08f1Fbp4WfKynJqUIXDZZ0/fZwxRyM9oIMmvmZSgtA4vr8TfGll9TQOBk+YV9unP60Dft8E5+1PnsUVzoNE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778091611; c=relaxed/simple; bh=k3ttcKGZ5HO79M9RM7jUSu835ztIhAfd6JnNYrdfjWs=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=CnSRrOx9ZT1ngRhkjW0UU+lpmedOGEfoechMK6zpvlaPpevFbWjra/k/W7P1tGCpqN09j14U6VMioWYVQNitIFP4L2PrEvr8YST3zsUoEUYAfydPbu1V2GzY1RSuhrNB111VU9q/tsuZMKxMJLDeXBLZRUYDFQwMLrrMWOdfuY4= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=ICROI9Cc DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 77B3E4BA23CC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778091611; 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: content-transfer-encoding:content-transfer-encoding; bh=uwcO1aQJab61ZGJqFi1ZQvVnY0muxA6BMGfbjvXIl78=; b=ICROI9CcjKS6U1yPuPclbwIp0YrfRFJgyWatggWnUtjarPCQYLQkWlMJ+ImbkFfRnmKNIL VbGKiq5P4fNwOmsaFjKIWYnIpZHsfAKYR1gOy3meP0+57kTJIsBm/imdvQfIGVqp4UezST bQg1X/gVrkYkBkPuDD2H6PKD0Y2f66A= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-37-cv1WMQmXMa2Fi0CF5S4U1g-1; Wed, 06 May 2026 14:20:09 -0400 X-MC-Unique: cv1WMQmXMa2Fi0CF5S4U1g-1 X-Mimecast-MFC-AGG-ID: cv1WMQmXMa2Fi0CF5S4U1g_1778091608 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 982C7180044D for ; Wed, 6 May 2026 18:20:08 +0000 (UTC) Received: from jason-thinkpadp1gen4i.rmtusma.csb (unknown [10.22.64.255]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C5860300019F; Wed, 6 May 2026 18:20:07 +0000 (UTC) From: Jason Merrill To: gcc-patches@gcc.gnu.org Cc: Marek Polacek , Jakub Jelinek Subject: [PATCH RFC] c++/reflection: add null_reflection_p Date: Wed, 6 May 2026 14:18:06 -0400 Message-ID: <20260506182006.1867406-1-jason@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: WM-fBOb0uP3yfmYZbrXJUt8b0g1c_bYuUh3W6ZmPvXk_1778091608 X-Mimecast-Originator: redhat.com content-type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-12.0 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_BLOCKED, SPF_HELO_PASS, SPF_NONE, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org Tested x86_64-pc-linux-gnu. Does the spelling in dump_expr make sense to you, or would you prefer something else? -- 8< -- I wanted to improve %E of info{}, and it seemed desirable to have a shorter way to spell this test. gcc/cp/ChangeLog: * reflect.cc (null_reflection_p): New. (splice): Use it. * error.cc (dump_expr): Use it. * cp-tree.h (null_reflection_p): Declare. --- gcc/cp/cp-tree.h | 1 + gcc/cp/error.cc | 5 +++++ gcc/cp/reflect.cc | 10 +++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) base-commit: b1cd9bd9908b0f05430e74c5cc82927b39997c42 diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index b94c7a8ca99..4e166c621b0 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -9454,6 +9454,7 @@ extern tree process_metafunction (const constexpr_ctx *, tree, tree, bool *, bool *, tree *); extern tree get_reflection (location_t, tree, reflect_kind = REFLECT_UNDEF); extern tree get_null_reflection () ATTRIBUTE_PURE; +extern bool null_reflection_p (const_tree) ATTRIBUTE_PURE; extern tree splice (tree); extern bool check_out_of_consteval_use (tree, bool = true); extern bool consteval_only_p (tree) ATTRIBUTE_PURE; diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc index 5f4cb477230..97988dbdd49 100644 --- a/gcc/cp/error.cc +++ b/gcc/cp/error.cc @@ -3331,6 +3331,11 @@ dump_expr (cxx_pretty_printer *pp, tree t, int flags) case REFLECT_EXPR: { + if (null_reflection_p (t)) + { + pp_cxx_ws_string (pp, "std::info{}"); + break; + } pp_string (pp, "^^"); tree h = REFLECT_EXPR_HANDLE (t); if (DECL_P (h)) diff --git a/gcc/cp/reflect.cc b/gcc/cp/reflect.cc index beaa7150007..a168d823a4c 100644 --- a/gcc/cp/reflect.cc +++ b/gcc/cp/reflect.cc @@ -267,6 +267,14 @@ get_null_reflection () return null_reflection; } +/* True iff T is a null reflection. */ + +bool +null_reflection_p (const_tree t) +{ + return REFLECT_EXPR_HANDLE (t) == unknown_type_node; +} + /* Do strip_typedefs on T, but only for types. */ static tree @@ -8525,7 +8533,7 @@ splice (tree refl) return error_mark_node; } - if (compare_reflections (refl, get_null_reflection ())) + if (null_reflection_p (refl)) { error_at (loc, "cannot splice a null reflection"); return error_mark_node;