From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 0RaJCJ7Kc2k3wxEAWB0awg (envelope-from ) for ; Fri, 23 Jan 2026 14:23:10 -0500 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=polymtl.ca header.i=@polymtl.ca header.a=rsa-sha256 header.s=oct2025 header.b=CbduDHrK; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 1E6C01E0AD; Fri, 23 Jan 2026 14:23:10 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id B0BF61E089 for ; Fri, 23 Jan 2026 14:23:09 -0500 (EST) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 61A834BCA419 for ; Fri, 23 Jan 2026 19:23:09 +0000 (GMT) Received: from smtp.polymtl.ca (smtp.polymtl.ca [132.207.4.11]) by sourceware.org (Postfix) with ESMTPS id EED994BCA40A for ; Fri, 23 Jan 2026 19:22:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EED994BCA40A Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=polymtl.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=polymtl.ca ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EED994BCA40A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=132.207.4.11 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1769196179; cv=none; b=BxjYCnrsTTFt2V/bhaGw3uxkKy4Fe0DGutL6AxEgsB/fhXJUmX6XH7qmxIwTrDzZ1YKVRr+fwP1TxEbZyRNRwdp4V3ZSRDJOBYs6rmuYxYepOJSqmlx00w7Mb8+aeJbFakW+zaoXG2PlYJCSrGzYMLSWiMu7ra6pgz0qvRndZC0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1769196179; c=relaxed/simple; bh=As7UMGOrhxDSBxXvbS1lB72OGwMCgpaB+chRjSv58yg=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=vPIkIlRcCcAF+bukQy0OHn11vXo8b/GOiSb7b84v+PD1+3OdpFU1Zzin8gczOLjoMb8TujQfQ8Wo25U/pqCUSzep1ii/lmQxSNhH/Zhj6bUdPKvWoKDjHrELAwTG9KF2Jd2NZ5y60xahSMx4oGVlUzBzisWSVCkovebjmHPyzkQ= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EED994BCA40A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=polymtl.ca header.i=@polymtl.ca header.a=rsa-sha256 header.s=oct2025 header.b=CbduDHrK Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id 60NJMrGP011501 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 23 Jan 2026 14:22:57 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp.polymtl.ca 60NJMrGP011501 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=polymtl.ca; s=oct2025; t=1769196178; bh=pwDj/pbpD1kW/VkgVj60EuYO8o+liPfVj1gJ5yzoNcQ=; h=From:To:Cc:Subject:Date:From; b=CbduDHrKeTHx0rniZbmCy5sIzwAKQp8dwHgOoyCDQ6W85PExwDU7QJKNLkcinpcyk 3Yxl1EIrW1L/xBiuUYkMVObwdvzWFurleuXFKDHjBobIw8u4esxgWb1ZXhTIN36MFC X/LL2Cl8r0/d6jD4lIBgfN0WlHf7Qj7dbMVuGx3CMXe+oO2Zsvu9zmHce7lzt1hhVG 7lUA6Hg2auVY4zG63wUEjBcgvD9BRUn6DrDqfJ33kM3xy52ix/t2kns32U0QtA/c9+ 7H9qLjN3bmOjhKXnNy1B0Xtb7L+d9+mJVMfMpt4+S1fUnIndgk/a7XCaPwqMpuqmgt G0PgJAv5y4BHA== Received: by simark.ca (Postfix) id 2F9D11E089; Fri, 23 Jan 2026 14:22:53 -0500 (EST) From: simon.marchi@polymtl.ca To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH] gdb: tighten assertions in set_type_vptr_* Date: Fri, 23 Jan 2026 14:22:21 -0500 Message-ID: <20260123192252.3626800-1-simon.marchi@polymtl.ca> X-Mailer: git-send-email 2.52.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Poly-FromMTA: (simark.ca [158.69.221.121]) at Fri, 23 Jan 2026 19:22:53 +0000 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org From: Simon Marchi In C++, only structures and classes (represented by TYPE_CODE_STRUCT) can participate in inheritance. I therefore think it does not make sense to allow for TYPE_CODE_UNION in set_type_vptr_basetype and set_type_vptr_fieldno. Remove the possibility for the type to be a union in these functions. Also, for the same reason, add an assertion that checks the type of basetype in set_type_vptr_basetype. I did not change the getters (internal_type_vptr_fieldno and internal_type_vptr_basetype), because it seems like they are called by code that handles similarly both structures and unions. Making those stricter would require adding conditions in those callers, which doesn't look like an improvement. Change allocate_cplus_struct_type to not use set_type_vptr_fieldno to initialize the field to -1, otherwise it would trip the assertion when initializing for a union type. I stumbled on this while reviewing this change: https://inbox.sourceware.org/gdb-patches/faa28230-4665-46f8-8d86-4c99262628d4@simark.ca/T/#t Change-Id: Id9b2dc288f24d50eb50da46782b5ec6de5682e81 --- gdb/gdbtypes.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 75404d00e1ac..bd9abc7e7004 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -1805,8 +1805,7 @@ void set_type_vptr_fieldno (struct type *type, int fieldno) { type = check_typedef (type); - gdb_assert (type->code () == TYPE_CODE_STRUCT - || type->code () == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT); if (!HAVE_CPLUS_STRUCT (type)) ALLOCATE_CPLUS_STRUCT_TYPE (type); TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_fieldno = fieldno; @@ -1831,8 +1830,8 @@ void set_type_vptr_basetype (struct type *type, struct type *basetype) { type = check_typedef (type); - gdb_assert (type->code () == TYPE_CODE_STRUCT - || type->code () == TYPE_CODE_UNION); + gdb_assert (type->code () == TYPE_CODE_STRUCT); + gdb_assert (check_typedef (basetype)->code () == TYPE_CODE_STRUCT); if (!HAVE_CPLUS_STRUCT (type)) ALLOCATE_CPLUS_STRUCT_TYPE (type); TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_basetype = basetype; @@ -3320,7 +3319,7 @@ allocate_cplus_struct_type (struct type *type) TYPE_RAW_CPLUS_SPECIFIC (type) = (struct cplus_struct_type *) TYPE_ZALLOC (type, sizeof (struct cplus_struct_type)); *(TYPE_RAW_CPLUS_SPECIFIC (type)) = cplus_struct_default; - set_type_vptr_fieldno (type, -1); + TYPE_RAW_CPLUS_SPECIFIC (type)->vptr_fieldno = -1; } const struct gnat_aux_type gnat_aux_default = base-commit: 329a53a6d590e2e90f590c89473990040a86c8e0 -- 2.52.0