From patchwork Fri Nov 3 16:09:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79029 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CC38238560A7 for ; Fri, 3 Nov 2023 16:10:09 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd35.google.com (mail-io1-xd35.google.com [IPv6:2607:f8b0:4864:20::d35]) by sourceware.org (Postfix) with ESMTPS id 583483858D32 for ; Fri, 3 Nov 2023 16:09:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 583483858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 583483858D32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d35 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027779; cv=none; b=tS5pSadXqjGgewMMBMl3m1M1DX2LHezWlHy8Q4Kns/+RWaOaP7iA9GjHPN95osP2FyRHaBtSJpT6phvq3dORE1x9Nni9XFTHuViMLI4GZ0XRi2Ujz737OJUGfAQrLi05t8DL949bLj15ipAI0kN1EtIOAI/IJCJQC2ue8MQd28Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027779; c=relaxed/simple; bh=qnkaD8QljU+nv2gwZWS53ZwHF7va04YuFpjrlXG7fe8=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=O0Ai1QhJ+ICkr3v+fqL9okUHecUH99AYdv4nwaLOouynwA0rxFIbNuj9zRJACAO5Dwopm3qA3i8M+OMYLrO0n2wMVBoFqxCAebaqP5eVEPWPcBXhmg5ayFqZMeY98zgWTJonrLf5wz68V3RLxc9W7tREPIlrnLd1Kdp3xWgKkdI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-io1-xd35.google.com with SMTP id ca18e2360f4ac-7a694a365d9so93223039f.0 for ; Fri, 03 Nov 2023 09:09:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1699027768; x=1699632568; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Ln40IXP1ybg+ELNvFQsbE6u9ASyV20l5UFcfCRcT2P4=; b=Lte1YoAc72tBaPF+0zb1YHcgKWS2XN6BjszWIYg6duSvIE8erFnMRx8yjGEfORPjr8 E1HrwbpSvn8mmLDDoKlFewWiLlyXxMhdRVH06QW6ztYwWPfHinUttrO8VSSp/mDhX8aL Z9y2/VR3+xXMLkRI2fmPemsdga02nvEhpBM+XNhuH/VxJiifUbR3RP9JuUNWmWFZGEFS 1THw03Iy/D7dwZQqrrXSleA7vAqce9oydmtPlt3ySVZRuIKCdeeyJzbvTrMYgeovudqS BG7yAp49Eo9eRiWhwn6djh4Ko/bvhInbE1jjzMcK7ryzxTerwmEaa3ffonbMMn0jf4GL i5bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699027768; x=1699632568; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ln40IXP1ybg+ELNvFQsbE6u9ASyV20l5UFcfCRcT2P4=; b=FpLJre4KZeODW8DwlPJeNFDNgPTpfSEhy9H4K4zE9N9TJm8u5s1c1iQUqtPzve+V8Q +JL2WJnwPdh0kuRHeN7u5gshWGQn1dVAm6kUzIfFujSJb6Zp/2K4BWpt5v0wjCBb/O6G jCGjvAg6Sxgp6+Wz+J5uGCpxGsDM1FvrUgszldCvDFRQ0u0pYC7/c7b8cGUdryizN891 KGWt+DT8uRaHj32S2Ac5ahYkZ7x46fyvvMhblc5hfrMJzRf1TxAUSl9A483gXmeL6A6N VAleiDyQ7ugmCUMMKZcZl3sS8eYhNqwMJSlVHZMHaqlx8OIuuX+WA2igga+XKxXn/OyF FNgg== X-Gm-Message-State: AOJu0YyV2zshpg0M004ppS7CuRo+yPbSb/SCMaTNnzomv36Hzw5aMjDL e4+d8ZzSWWKZEWU8zYrmuJ9a/t+c2EsJpM9UUWVdlQ== X-Google-Smtp-Source: AGHT+IFYIOs5XhZ5OxyODne0KNDW3AOV4roxPS2Rt7QIdTadBpVgI1FQ7PSgNsmq+eXEs1E4TGZnag== X-Received: by 2002:a05:6602:1608:b0:79a:b53c:d758 with SMTP id x8-20020a056602160800b0079ab53cd758mr30983845iow.1.1699027768564; Fri, 03 Nov 2023 09:09:28 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id gu16-20020a0566382e1000b0042b3dcb1106sm581839jab.47.2023.11.03.09.09.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 09:09:28 -0700 (PDT) From: Tom Tromey Date: Fri, 03 Nov 2023 10:09:23 -0600 Subject: [PATCH v3 1/9] Use .def file to stringify type codes MIME-Version: 1.0 Message-Id: <20231103-field-bits-v3-1-273c40bcaf3d@adacore.com> References: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> In-Reply-To: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> To: gdb-patches@sourceware.org Cc: Simon Marchi , Keith Seitz X-Mailer: b4 0.12.4 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org This changes recursive_dump_type to reuse the type-codes.def file when stringifying type codes. This version of the patch changes the "unknown" case to an assert. Acked-By: Simon Marchi Reviewed-by: Keith Seitz --- gdb/gdbtypes.c | 99 +++++++++++----------------------------------------------- 1 file changed, 18 insertions(+), 81 deletions(-) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 7011fddd695..a585674ebe4 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5099,6 +5099,23 @@ dump_dynamic_prop (dynamic_prop const& prop) } } +/* Return a string that represents a type code. */ +static const char * +type_code_name (type_code code) +{ + switch (code) + { +#define OP(X) case X: return # X; +#include "type-codes.def" +#undef OP + + case TYPE_CODE_UNDEF: + return "TYPE_CODE_UNDEF"; + } + + gdb_assert_not_reached ("unhandled type_code"); +} + void recursive_dump_type (struct type *type, int spaces) { @@ -5136,87 +5153,7 @@ recursive_dump_type (struct type *type, int spaces) type->name () ? type->name () : "", host_address_to_string (type->name ())); gdb_printf ("%*scode 0x%x ", spaces, "", type->code ()); - switch (type->code ()) - { - case TYPE_CODE_UNDEF: - gdb_printf ("(TYPE_CODE_UNDEF)"); - break; - case TYPE_CODE_PTR: - gdb_printf ("(TYPE_CODE_PTR)"); - break; - case TYPE_CODE_ARRAY: - gdb_printf ("(TYPE_CODE_ARRAY)"); - break; - case TYPE_CODE_STRUCT: - gdb_printf ("(TYPE_CODE_STRUCT)"); - break; - case TYPE_CODE_UNION: - gdb_printf ("(TYPE_CODE_UNION)"); - break; - case TYPE_CODE_ENUM: - gdb_printf ("(TYPE_CODE_ENUM)"); - break; - case TYPE_CODE_FLAGS: - gdb_printf ("(TYPE_CODE_FLAGS)"); - break; - case TYPE_CODE_FUNC: - gdb_printf ("(TYPE_CODE_FUNC)"); - break; - case TYPE_CODE_INT: - gdb_printf ("(TYPE_CODE_INT)"); - break; - case TYPE_CODE_FLT: - gdb_printf ("(TYPE_CODE_FLT)"); - break; - case TYPE_CODE_VOID: - gdb_printf ("(TYPE_CODE_VOID)"); - break; - case TYPE_CODE_SET: - gdb_printf ("(TYPE_CODE_SET)"); - break; - case TYPE_CODE_RANGE: - gdb_printf ("(TYPE_CODE_RANGE)"); - break; - case TYPE_CODE_STRING: - gdb_printf ("(TYPE_CODE_STRING)"); - break; - case TYPE_CODE_ERROR: - gdb_printf ("(TYPE_CODE_ERROR)"); - break; - case TYPE_CODE_MEMBERPTR: - gdb_printf ("(TYPE_CODE_MEMBERPTR)"); - break; - case TYPE_CODE_METHODPTR: - gdb_printf ("(TYPE_CODE_METHODPTR)"); - break; - case TYPE_CODE_METHOD: - gdb_printf ("(TYPE_CODE_METHOD)"); - break; - case TYPE_CODE_REF: - gdb_printf ("(TYPE_CODE_REF)"); - break; - case TYPE_CODE_CHAR: - gdb_printf ("(TYPE_CODE_CHAR)"); - break; - case TYPE_CODE_BOOL: - gdb_printf ("(TYPE_CODE_BOOL)"); - break; - case TYPE_CODE_COMPLEX: - gdb_printf ("(TYPE_CODE_COMPLEX)"); - break; - case TYPE_CODE_TYPEDEF: - gdb_printf ("(TYPE_CODE_TYPEDEF)"); - break; - case TYPE_CODE_NAMESPACE: - gdb_printf ("(TYPE_CODE_NAMESPACE)"); - break; - case TYPE_CODE_FIXED_POINT: - gdb_printf ("(TYPE_CODE_FIXED_POINT)"); - break; - default: - gdb_printf ("(UNKNOWN TYPE CODE)"); - break; - } + gdb_printf ("(%s)", type_code_name (type->code ())); gdb_puts ("\n"); gdb_printf ("%*slength %s\n", spaces, "", pulongest (type->length ())); From patchwork Fri Nov 3 16:09:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79027 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7B009386C5AC for ; Fri, 3 Nov 2023 16:10:01 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd29.google.com (mail-io1-xd29.google.com [IPv6:2607:f8b0:4864:20::d29]) by sourceware.org (Postfix) with ESMTPS id EA6EC3858D39 for ; Fri, 3 Nov 2023 16:09:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EA6EC3858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EA6EC3858D39 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d29 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027779; cv=none; b=RfnlgbVkep4spN8vSUbO0Qd6Y3wLlZOFZW9Ew0zoS30vwIGurkNFdcb6oiAJgQWWCyTuwJgSOBUB+DyhZPqxC5LyhSMo4DGCBi6Agq8jxKgWwCi+tw+da7bnhpqU/Nn8irNBkBa0iVB/Q99nsHcw90SwzkETVOPx/GFkVqPnWHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027779; c=relaxed/simple; bh=B4wYsOB9JalS4o8i4vJMOKC5YeOR4j3+GTclxzm5hxI=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=O4r/7C1pAGYC6nLbXrvJ5cuZR4d5Dkkpabdh+3/fHXE1lD73XWG+5QMfBVp/t0QL4FC8GAq1EHLOg9oKPXgNqhd9wJHw9Rb6+Y1vNRqcrru+spat7Ghxa9qwMWmZi6DSRO8n+oxHNMsMr/NJNhuTpadJAVuLVLon/RQgh89XlB4= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-io1-xd29.google.com with SMTP id ca18e2360f4ac-7a67b9cd230so80599839f.1 for ; Fri, 03 Nov 2023 09:09:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1699027769; x=1699632569; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=h7ikK2xePwmWiSr6gicmXGwXrIHvClDbBZfna8fiMLI=; b=QnrJpus09Fnrfrhr2sR9UICvMPYUs4h7yAckJ2IgodbRDjPS0uDo10y9MTdjRy2WLp sErSlrK1Sy/YsPrc6RxQBgZqqdRh8LRO9HkcxYjPC98nFB0i+b7tmrG8E0+SCPivW9kA eFOYy0a+MmQ1HIlMB/gMxiBmiSJdqFZ49NwZjyZ0xTUd0zdmYC8TLCHfvgKPdj+yvbnS htEKGgnPpQyJXv6O3bmUsyx93TTgn5C9ZOO3mpRFehqAA993NiQR5xdxF92vaXTd6Paf cTC81rQ/2AYJ6Adyx8tpoKS9Rt2enGQ58jLoMJvCArUk4/IpoKOxKxwJlntqbnpuWr4L aUZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699027769; x=1699632569; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=h7ikK2xePwmWiSr6gicmXGwXrIHvClDbBZfna8fiMLI=; b=CNvoVEb+GlT/Hgo46I0tt5Y72Gl+DrxB/XPvmjvNWf4lukBh1MyN0OI0cIEtzxHaEv exKKi+TNFEPIG4hqHN3sJTO7RR4BCQVU2eaAxF+xdZHnuv2+9/K+Iqk8owiEaEyntwIM h154A/wk0KCcG4PQzKDK29sDEVkrqsKV+t3s0deWbQlhnAbLVeWv2x76rQMfBwuP7AxF 9tyd9KC7U6gBodelVTXhLe+T2HWm6xXkG1xRUATeQc7BLicbU0lWHEttJYEroxB61lvA jSyIXBNHFlZ4dzbLfZt2vjKudQUEBWY8XQj40UQ+kEx4vXAl3SFUKmlPWcgXI1TzTjJo pwlA== X-Gm-Message-State: AOJu0YyCNw44GEhf/EsSJ/wP4oYiSkpu0uZANbLkKVIq+24cHa9tCbxU bsK41rDokMiv5dn4IsnIbqtcqw== X-Google-Smtp-Source: AGHT+IEDtJHbC4y7HnghhHlCwOVlZpTgn/DaNqwDHslbsvYrryT7UcbkCtfrrK6OkyGW6DRSulEt7A== X-Received: by 2002:a05:6602:13d5:b0:7a6:889e:c4b7 with SMTP id o21-20020a05660213d500b007a6889ec4b7mr31823157iov.11.1699027769159; Fri, 03 Nov 2023 09:09:29 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id gu16-20020a0566382e1000b0042b3dcb1106sm581839jab.47.2023.11.03.09.09.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 09:09:28 -0700 (PDT) From: Tom Tromey Date: Fri, 03 Nov 2023 10:09:24 -0600 Subject: [PATCH v3 2/9] Print field accessibility inline MIME-Version: 1.0 Message-Id: <20231103-field-bits-v3-2-273c40bcaf3d@adacore.com> References: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> In-Reply-To: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> To: gdb-patches@sourceware.org Cc: Simon Marchi , Keith Seitz X-Mailer: b4 0.12.4 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org This changes recursive_dump_type to print field accessibility information "inline". This is clearer and preserves the information when the byte vectors are removed. Acked-By: Simon Marchi Reviewed-by: Keith Seitz --- gdb/gdbtypes.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index a585674ebe4..2cd74a2fb29 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5289,12 +5289,23 @@ recursive_dump_type (struct type *type, int spaces) gdb_printf ("%*s[%d] bitpos %s bitsize %d type ", spaces + 2, "", idx, plongest (type->field (idx).loc_bitpos ()), type->field (idx).bitsize ()); - gdb_printf ("%s name '%s' (%s)\n", + gdb_printf ("%s name '%s' (%s)", host_address_to_string (type->field (idx).type ()), type->field (idx).name () != NULL ? type->field (idx).name () : "", host_address_to_string (type->field (idx).name ())); + if (TYPE_FIELD_VIRTUAL (type, idx)) + gdb_printf (" virtual"); + + if (TYPE_FIELD_PRIVATE (type, idx)) + gdb_printf (" private"); + else if (TYPE_FIELD_PROTECTED (type, idx)) + gdb_printf (" protected"); + else if (TYPE_FIELD_IGNORE (type, idx)) + gdb_printf (" ignored"); + + gdb_printf ("\n"); if (type->field (idx).type () != NULL) { recursive_dump_type (type->field (idx).type (), spaces + 4); From patchwork Fri Nov 3 16:09:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79033 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C9B8F385782B for ; Fri, 3 Nov 2023 16:10:29 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x12d.google.com (mail-il1-x12d.google.com [IPv6:2607:f8b0:4864:20::12d]) by sourceware.org (Postfix) with ESMTPS id F07AA3858CD1 for ; Fri, 3 Nov 2023 16:09:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F07AA3858CD1 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F07AA3858CD1 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::12d ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027779; cv=none; b=bbN9YkSavwVdIFcOtml/F5BK9ilWgLFR+QIknmUexz74VzaCJWNa8qXD2NPynZwicWFCuXhTP6vlfn+NzP3qy14yU+W7Zj2ySBd3x2jqhFTK2o9qREFLZvx/Lr+C4ETHfxrnWP4ZEg4+1ViafMSq01AaqYT6Dd92unWBiMVCZd4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027779; c=relaxed/simple; bh=PN25mjZHO305Dzxo+SmaB42+3mowRE2IDE+v+XGA8uk=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=rGNP0N7Yo0uO9QbOsqpD+F6pOtErDRro8zE6JDRsRl5z8dU+jwbpSSM2ZXCqjeMFwBisQ9L0KkEtG1xW1KQFg6XVIHrFL6ATs/CmNSSjkarletC7ugt9rPYJ730yd3wxRTjD9nY4tErLGdqoLR2QsJleXKbuvoLA88YUkYsZ2bM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x12d.google.com with SMTP id e9e14a558f8ab-357c9dc1068so6170565ab.0 for ; Fri, 03 Nov 2023 09:09:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1699027770; x=1699632570; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=opULV9xQdqXaeuc6Z8nKXKnHh7EiJWt/hHNzHOGrSOk=; b=U2/oUbXeMRgobRf8QEXECIBnOxMhD8NFMy0TgaCghK/vUvdK+QjTvFR+dbcH/nPdVf 1Jl2c9XK1XhtkXndDt5adO09NdxRXO9+49Tw138l50k4e7JbfQbS5mPtsOGq3T/F4nC7 RSAydYhtamzXLILu7TWVcMU7KCNWYgR5jDBymRSR9JOU1PIfFQSw54/+0v/1/CP23i+h 4WEqXwqZcGVBLJUTN2w8dgL4/440WmDq7zzDDg8yQquo34oxGZjBA0eBYH+s8t/6rBp6 HagFkVxI0CX5MqVGiBnJkPJk/SRQq/loB+N74LznC2cR1wbXWxiON6UJllVeLEadnS/H X+Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699027770; x=1699632570; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=opULV9xQdqXaeuc6Z8nKXKnHh7EiJWt/hHNzHOGrSOk=; b=twqrpBouOOIczCD3wso50tAtumNOziK2z5kx4vv6ZAP0I4gCTfUUealthB3XHnq+Cn Lz/qYGLRk/GsKE3CRgEKyI34ocfdPgN3hDkG9pXXFNcV6I2Rl7cPaDwmJ/1xJatoBQCn HJy169TA7Jsr+u8nyiG89iEExBIyI7Uskm0DAmTmlEtLYZJYnVfmc0jlSHMGpolNqVLE L8ocJcbrjLLjq6VZLB/tdBFHbMxdf/oYWDyJNL+rKIdUCii63zSbhJf+WRl4aKbQ7383 RXDJlze5Y4ZiZ8h+aWL7FaubafbD62gzbJPJlD8w+yl6SDYN/lP4kqxEbGAA3V3/2eV6 PJeg== X-Gm-Message-State: AOJu0YwXVazNCvQLSZGRVSyFGnSg3unHbN+KvgZCOqr5acYRkK5DpWS4 XJqL9kYqmhJpnSoAcnLCopMBeQ== X-Google-Smtp-Source: AGHT+IGVTw7O2NbvsUPi4ybFDsNpyzBTx+5oi5BTgL+9wowmSot/WN+NyAEtNQELKzNwQp2f3xQc/Q== X-Received: by 2002:a05:6e02:1c07:b0:357:f5f8:2245 with SMTP id l7-20020a056e021c0700b00357f5f82245mr3202035ilh.13.1699027769884; Fri, 03 Nov 2023 09:09:29 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id gu16-20020a0566382e1000b0042b3dcb1106sm581839jab.47.2023.11.03.09.09.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 09:09:29 -0700 (PDT) From: Tom Tromey Date: Fri, 03 Nov 2023 10:09:25 -0600 Subject: [PATCH v3 3/9] Remove byte vectors from cplus_struct_type MIME-Version: 1.0 Message-Id: <20231103-field-bits-v3-3-273c40bcaf3d@adacore.com> References: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> In-Reply-To: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> To: gdb-patches@sourceware.org Cc: Simon Marchi , Keith Seitz X-Mailer: b4 0.12.4 X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org This removes some byte vectors from cplus_struct_type, moving the information into bitfields in holes in struct field. A new 'enum accessibility' is added to hold some of this information. A similar enum is removed from c-varobj.c. Note that the stabs reader treats "ignored" as an accessibility. However, the stabs texinfo documents this as a public field that is optimized out -- unfortunately nobody has updated the stabs reader to use the better value-based optimized-out machinery. I looked and apparently gcc never emitted this visibility value, so whatever compiler generated this stab is unknown. I left a comment in gdbtypes.h to this effect. Acked-By: Simon Marchi Reviewed-by: Keith Seitz --- gdb/c-varobj.c | 14 +++---- gdb/dwarf2/read.c | 86 +++++++------------------------------- gdb/gdbtypes.c | 53 ----------------------- gdb/gdbtypes.h | 121 +++++++++++++++++++++++++---------------------------- gdb/stabsread.c | 123 +++++++++++++++++++----------------------------------- 5 files changed, 122 insertions(+), 275 deletions(-) diff --git a/gdb/c-varobj.c b/gdb/c-varobj.c index b00a2345e2c..543cd585eb2 100644 --- a/gdb/c-varobj.c +++ b/gdb/c-varobj.c @@ -669,19 +669,17 @@ cplus_name_of_variable (const struct varobj *parent) return c_name_of_variable (parent); } -enum accessibility { private_field, protected_field, public_field }; - /* Check if field INDEX of TYPE has the specified accessibility. Return 0 if so and 1 otherwise. */ static int match_accessibility (struct type *type, int index, enum accessibility acc) { - if (acc == private_field && TYPE_FIELD_PRIVATE (type, index)) + if (acc == accessibility::PRIVATE && TYPE_FIELD_PRIVATE (type, index)) return 1; - else if (acc == protected_field && TYPE_FIELD_PROTECTED (type, index)) + else if (acc == accessibility::PROTECTED && TYPE_FIELD_PROTECTED (type, index)) return 1; - else if (acc == public_field && !TYPE_FIELD_PRIVATE (type, index) + else if (acc == accessibility::PUBLIC && !TYPE_FIELD_PRIVATE (type, index) && !TYPE_FIELD_PROTECTED (type, index)) return 1; else @@ -737,16 +735,16 @@ cplus_describe_child (const struct varobj *parent, int index, have the access control we are looking for to properly find the indexed field. */ int type_index = TYPE_N_BASECLASSES (type); - enum accessibility acc = public_field; + enum accessibility acc = accessibility::PUBLIC; int vptr_fieldno; struct type *basetype = NULL; const char *field_name; vptr_fieldno = get_vptr_fieldno (type, &basetype); if (parent->name == "private") - acc = private_field; + acc = accessibility::PRIVATE; else if (parent->name == "protected") - acc = protected_field; + acc = accessibility::PROTECTED; while (index >= 0) { diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index c4948164fb1..e52ca5b5b83 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -673,8 +673,6 @@ struct variant_part_builder struct nextfield { - int accessibility = 0; - int virtuality = 0; /* Variant parts need to find the discriminant, which is a DIE reference. We track the section offset of each field to make this link. */ @@ -697,9 +695,6 @@ struct field_info std::vector fields; std::vector baseclasses; - /* Set if the accessibility of one of the fields is not public. */ - bool non_public_fields = false; - /* Member function fieldlist array, contains name of possibly overloaded member function, number of overloaded member functions and a pointer to the head of the member function field chain. */ @@ -11514,15 +11509,23 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die, new_field->offset = die->sect_off; - new_field->accessibility = dwarf2_access_attribute (die, cu); - if (new_field->accessibility != DW_ACCESS_public) - fip->non_public_fields = true; + switch (dwarf2_access_attribute (die, cu)) + { + case DW_ACCESS_public: + break; + case DW_ACCESS_private: + new_field->field.set_accessibility (accessibility::PRIVATE); + break; + case DW_ACCESS_protected: + new_field->field.set_accessibility (accessibility::PROTECTED); + break; + default: + gdb_assert_not_reached ("invalid accessibility"); + } attr = dwarf2_attr (die, DW_AT_virtuality, cu); - if (attr != nullptr) - new_field->virtuality = attr->as_virtuality (); - else - new_field->virtuality = DW_VIRTUALITY_none; + if (attr != nullptr && attr->as_virtuality ()) + new_field->field.set_virtual (); fp = &new_field->field; @@ -11616,8 +11619,7 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die, if (dwarf2_attr (die, DW_AT_artificial, cu)) { fp->set_is_artificial (true); - new_field->accessibility = DW_ACCESS_private; - fip->non_public_fields = true; + fp->set_accessibility (accessibility::PRIVATE); } } else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable) @@ -11931,30 +11933,9 @@ dwarf2_attach_fields_to_type (struct field_info *fip, struct type *type, and create blank accessibility bitfields if necessary. */ type->alloc_fields (nfields); - if (fip->non_public_fields && cu->lang () != language_ada) - { - ALLOCATE_CPLUS_STRUCT_TYPE (type); - - TYPE_FIELD_PRIVATE_BITS (type) = - (B_TYPE *) TYPE_ZALLOC (type, B_BYTES (nfields)); - - TYPE_FIELD_PROTECTED_BITS (type) = - (B_TYPE *) TYPE_ZALLOC (type, B_BYTES (nfields)); - - TYPE_FIELD_IGNORE_BITS (type) = - (B_TYPE *) TYPE_ZALLOC (type, B_BYTES (nfields)); - } - - /* If the type has baseclasses, allocate and clear a bit vector for - TYPE_FIELD_VIRTUAL_BITS. */ if (!fip->baseclasses.empty () && cu->lang () != language_ada) { - int num_bytes = B_BYTES (fip->baseclasses.size ()); - unsigned char *pointer; - ALLOCATE_CPLUS_STRUCT_TYPE (type); - pointer = (unsigned char *) TYPE_ZALLOC (type, num_bytes); - TYPE_FIELD_VIRTUAL_BITS (type) = pointer; TYPE_N_BASECLASSES (type) = fip->baseclasses.size (); } @@ -11969,41 +11950,6 @@ dwarf2_attach_fields_to_type (struct field_info *fip, struct type *type, : fip->fields[i - fip->baseclasses.size ()]); type->field (i) = field.field; - switch (field.accessibility) - { - case DW_ACCESS_private: - if (cu->lang () != language_ada) - SET_TYPE_FIELD_PRIVATE (type, i); - break; - - case DW_ACCESS_protected: - if (cu->lang () != language_ada) - SET_TYPE_FIELD_PROTECTED (type, i); - break; - - case DW_ACCESS_public: - break; - - default: - /* Unknown accessibility. Complain and treat it as public. */ - { - complaint (_("unsupported accessibility %d"), - field.accessibility); - } - break; - } - if (i < fip->baseclasses.size ()) - { - switch (field.virtuality) - { - case DW_VIRTUALITY_virtual: - case DW_VIRTUALITY_pure_virtual: - if (cu->lang () == language_ada) - error (_("unexpected virtuality in component of Ada type")); - SET_TYPE_FIELD_VIRTUAL (type, i); - break; - } - } } } diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 2cd74a2fb29..e3a12a45afd 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -4883,25 +4883,6 @@ rank_one_type (struct type *parm, struct type *arg, struct value *value) /* End of functions for overload resolution. */ -/* Routines to pretty-print types. */ - -static void -print_bit_vector (B_TYPE *bits, int nbits) -{ - int bitno; - - for (bitno = 0; bitno < nbits; bitno++) - { - if ((bitno % 8) == 0) - { - gdb_puts (" "); - } - if (B_TST (bits, bitno)) - gdb_printf (("1")); - else - gdb_printf (("0")); - } -} /* Note the first arg should be the "this" pointer, we may not want to include it since we may get into a infinitely recursive @@ -5004,40 +4985,6 @@ print_cplus_stuff (struct type *type, int spaces) TYPE_N_BASECLASSES (type)); gdb_printf ("%*snfn_fields %d\n", spaces, "", TYPE_NFN_FIELDS (type)); - if (TYPE_N_BASECLASSES (type) > 0) - { - gdb_printf - ("%*svirtual_field_bits (%d bits at *%s)", - spaces, "", TYPE_N_BASECLASSES (type), - host_address_to_string (TYPE_FIELD_VIRTUAL_BITS (type))); - - print_bit_vector (TYPE_FIELD_VIRTUAL_BITS (type), - TYPE_N_BASECLASSES (type)); - gdb_puts ("\n"); - } - if (type->num_fields () > 0) - { - if (TYPE_FIELD_PRIVATE_BITS (type) != NULL) - { - gdb_printf - ("%*sprivate_field_bits (%d bits at *%s)", - spaces, "", type->num_fields (), - host_address_to_string (TYPE_FIELD_PRIVATE_BITS (type))); - print_bit_vector (TYPE_FIELD_PRIVATE_BITS (type), - type->num_fields ()); - gdb_puts ("\n"); - } - if (TYPE_FIELD_PROTECTED_BITS (type) != NULL) - { - gdb_printf - ("%*sprotected_field_bits (%d bits at *%s", - spaces, "", type->num_fields (), - host_address_to_string (TYPE_FIELD_PROTECTED_BITS (type))); - print_bit_vector (TYPE_FIELD_PROTECTED_BITS (type), - type->num_fields ()); - gdb_puts ("\n"); - } - } if (TYPE_NFN_FIELDS (type) > 0) { dump_fn_fieldlists (type, spaces); diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 505c8ba12b5..f5dd2b8076d 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -542,6 +542,16 @@ union field_location struct dwarf2_locexpr_baton *dwarf_block; }; +/* Accessibility of a member. */ +enum class accessibility : unsigned +{ + /* It's important that this be 0 so that fields default to + public. */ + PUBLIC = 0, + PROTECTED = 1, + PRIVATE = 2, +}; + struct field { struct type *type () const @@ -668,6 +678,41 @@ struct field m_loc.dwarf_block = dwarf_block; } + /* Set the field's accessibility. */ + void set_accessibility (accessibility acc) + { m_accessibility = acc; } + + /* Fetch the field's accessibility. */ + enum accessibility accessibility () const + { return m_accessibility; } + + /* True if this field is 'private'. */ + bool is_private () const + { return m_accessibility == accessibility::PRIVATE; } + + /* True if this field is 'protected'. */ + bool is_protected () const + { return m_accessibility == accessibility::PROTECTED; } + + /* True if this field is 'virtual'. */ + bool is_virtual () const + { return m_virtual; } + + /* Set the field's "virtual" flag. */ + void set_virtual () + { m_virtual = true; } + + /* True if this field is 'ignored'. */ + bool is_ignored () const + { return m_ignored; } + + /* Set the field's "ignored" flag. Note that the 'ignored' bit is + deprecated. It was used by some unknown stabs generator, and has + been replaced by the optimized-out approach -- however, it + remains because the stabs reader was never updated. */ + void set_ignored () + { m_ignored = true; } + union field_location m_loc; /* * For a function or member type, this is 1 if the argument is @@ -677,6 +722,13 @@ struct field unsigned int m_artificial : 1; + /* Accessibility of the field. */ + ENUM_BITFIELD (accessibility) m_accessibility : 2; + /* Whether the field is 'virtual'. */ + bool m_virtual : 1; + /* Whether the field is 'ignored'. */ + bool m_ignored : 1; + /* * Discriminant for union field_location. */ ENUM_BITFIELD(field_loc_kind) m_loc_kind : 3; @@ -1672,42 +1724,6 @@ struct cplus_struct_type struct type *vptr_basetype; - /* * For derived classes, the number of base classes is given by - n_baseclasses and virtual_field_bits is a bit vector containing - one bit per base class. If the base class is virtual, the - corresponding bit will be set. - I.E, given: - - class A{}; - class B{}; - class C : public B, public virtual A {}; - - B is a baseclass of C; A is a virtual baseclass for C. - This is a C++ 2.0 language feature. */ - - B_TYPE *virtual_field_bits; - - /* * For classes with private fields, the number of fields is - given by nfields and private_field_bits is a bit vector - containing one bit per field. - - If the field is private, the corresponding bit will be set. */ - - B_TYPE *private_field_bits; - - /* * For classes with protected fields, the number of fields is - given by nfields and protected_field_bits is a bit vector - containing one bit per field. - - If the field is private, the corresponding bit will be set. */ - - B_TYPE *protected_field_bits; - - /* * For classes with fields to be ignored, either this is - optimized out or this field has length 0. */ - - B_TYPE *ignore_field_bits; - /* * For classes, structures, and unions, a description of each field, which consists of an overloaded name, followed by the types of arguments that the method expects, and then the name @@ -1952,37 +1968,16 @@ extern void set_type_vptr_basetype (struct type *, struct type *); #define TYPE_CPLUS_DYNAMIC(thistype) TYPE_CPLUS_SPECIFIC (thistype)->is_dynamic #define BASETYPE_VIA_VIRTUAL(thistype, index) \ - (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \ - : B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (index))) - -#define TYPE_FIELD_PRIVATE_BITS(thistype) \ - TYPE_CPLUS_SPECIFIC(thistype)->private_field_bits -#define TYPE_FIELD_PROTECTED_BITS(thistype) \ - TYPE_CPLUS_SPECIFIC(thistype)->protected_field_bits -#define TYPE_FIELD_IGNORE_BITS(thistype) \ - TYPE_CPLUS_SPECIFIC(thistype)->ignore_field_bits -#define TYPE_FIELD_VIRTUAL_BITS(thistype) \ - TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits -#define SET_TYPE_FIELD_PRIVATE(thistype, n) \ - B_SET (TYPE_CPLUS_SPECIFIC(thistype)->private_field_bits, (n)) -#define SET_TYPE_FIELD_PROTECTED(thistype, n) \ - B_SET (TYPE_CPLUS_SPECIFIC(thistype)->protected_field_bits, (n)) -#define SET_TYPE_FIELD_IGNORE(thistype, n) \ - B_SET (TYPE_CPLUS_SPECIFIC(thistype)->ignore_field_bits, (n)) -#define SET_TYPE_FIELD_VIRTUAL(thistype, n) \ - B_SET (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (n)) + ((thistype)->field (index).is_virtual ()) + #define TYPE_FIELD_PRIVATE(thistype, n) \ - (TYPE_CPLUS_SPECIFIC(thistype)->private_field_bits == NULL ? 0 \ - : B_TST(TYPE_CPLUS_SPECIFIC(thistype)->private_field_bits, (n))) + ((thistype)->field (n).is_private ()) #define TYPE_FIELD_PROTECTED(thistype, n) \ - (TYPE_CPLUS_SPECIFIC(thistype)->protected_field_bits == NULL ? 0 \ - : B_TST(TYPE_CPLUS_SPECIFIC(thistype)->protected_field_bits, (n))) + ((thistype)->field (n).is_protected ()) #define TYPE_FIELD_IGNORE(thistype, n) \ - (TYPE_CPLUS_SPECIFIC(thistype)->ignore_field_bits == NULL ? 0 \ - : B_TST(TYPE_CPLUS_SPECIFIC(thistype)->ignore_field_bits, (n))) + ((thistype)->field (n).is_ignored ()) #define TYPE_FIELD_VIRTUAL(thistype, n) \ - (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \ - : B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (n))) + ((thistype)->field (n).is_virtual ()) #define TYPE_FN_FIELDLISTS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists #define TYPE_FN_FIELDLIST(thistype, n) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists[n] diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 7402a26a401..334371c2e46 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -65,11 +65,6 @@ struct stabs_nextfield { struct stabs_nextfield *next; - /* This is the raw visibility from the stab. It is not checked - for being one of the visibilities we recognize, so code which - examines this field better be able to deal. */ - int visibility; - struct field field; }; @@ -2789,7 +2784,7 @@ read_cpp_abbrev (struct stab_field_info *fip, const char **pp, } /* This field is unpacked. */ fip->list->field.set_bitsize (0); - fip->list->visibility = VISIBILITY_PRIVATE; + fip->list->field.set_accessibility (accessibility::PRIVATE); } else { @@ -2814,15 +2809,42 @@ read_one_struct_field (struct stab_field_info *fip, const char **pp, *pp = p + 1; /* This means we have a visibility for a field coming. */ + int visibility; if (**pp == '/') { (*pp)++; - fip->list->visibility = *(*pp)++; + visibility = *(*pp)++; } else { /* normal dbx-style format, no explicit visibility */ - fip->list->visibility = VISIBILITY_PUBLIC; + visibility = VISIBILITY_PUBLIC; + } + + switch (visibility) + { + case VISIBILITY_PRIVATE: + fip->list->field.set_accessibility (accessibility::PRIVATE); + break; + + case VISIBILITY_PROTECTED: + fip->list->field.set_accessibility (accessibility::PROTECTED); + break; + + case VISIBILITY_IGNORE: + fip->list->field.set_ignored (); + break; + + case VISIBILITY_PUBLIC: + break; + + default: + /* Unknown visibility. Complain and treat it as public. */ + { + complaint (_("Unknown visibility `%c' for field"), + visibility); + } + break; } fip->list->field.set_type (read_type (pp, objfile)); @@ -2892,7 +2914,7 @@ read_one_struct_field (struct stab_field_info *fip, const char **pp, for dbx compatibility. */ /* Ignore this field. */ - fip->list->visibility = VISIBILITY_IGNORE; + fip->list->field.set_ignored (); } else { @@ -3066,21 +3088,6 @@ read_baseclasses (struct stab_field_info *fip, const char **pp, return 0; } -#if 0 - /* Some stupid compilers have trouble with the following, so break - it up into simpler expressions. */ - TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *) - TYPE_ZALLOC (type, B_BYTES (TYPE_N_BASECLASSES (type))); -#else - { - int num_bytes = B_BYTES (TYPE_N_BASECLASSES (type)); - char *pointer; - - pointer = (char *) TYPE_ZALLOC (type, num_bytes); - TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *) pointer; - } -#endif /* 0 */ - for (i = 0; i < TYPE_N_BASECLASSES (type); i++) { newobj = OBSTACK_ZALLOC (&fip->obstack, struct stabs_nextfield); @@ -3097,7 +3104,7 @@ read_baseclasses (struct stab_field_info *fip, const char **pp, /* Nothing to do. */ break; case '1': - SET_TYPE_FIELD_VIRTUAL (type, i); + newobj->field.set_virtual (); break; default: /* Unknown character. Complain and treat it as non-virtual. */ @@ -3108,11 +3115,15 @@ read_baseclasses (struct stab_field_info *fip, const char **pp, } ++(*pp); - newobj->visibility = *(*pp)++; - switch (newobj->visibility) + int visibility = *(*pp)++; + switch (visibility) { case VISIBILITY_PRIVATE: + newobj->field.set_accessibility (accessibility::PRIVATE); + break; case VISIBILITY_PROTECTED: + newobj->field.set_accessibility (accessibility::PROTECTED); + break; case VISIBILITY_PUBLIC: break; default: @@ -3120,8 +3131,7 @@ read_baseclasses (struct stab_field_info *fip, const char **pp, public. */ { complaint (_("Unknown visibility `%c' for baseclass"), - newobj->visibility); - newobj->visibility = VISIBILITY_PUBLIC; + visibility); } } @@ -3268,43 +3278,19 @@ attach_fields_to_type (struct stab_field_info *fip, struct type *type, struct objfile *objfile) { int nfields = 0; - int non_public_fields = 0; struct stabs_nextfield *scan; - /* Count up the number of fields that we have, as well as taking note of - whether or not there are any non-public fields, which requires us to - allocate and build the private_field_bits and protected_field_bits - bitfields. */ + /* Count up the number of fields that we have. */ for (scan = fip->list; scan != NULL; scan = scan->next) - { - nfields++; - if (scan->visibility != VISIBILITY_PUBLIC) - { - non_public_fields++; - } - } + nfields++; /* Now we know how many fields there are, and whether or not there are any non-public fields. Record the field count, allocate space for the - array of fields, and create blank visibility bitfields if necessary. */ + array of fields. */ type->alloc_fields (nfields); - if (non_public_fields) - { - ALLOCATE_CPLUS_STRUCT_TYPE (type); - - TYPE_FIELD_PRIVATE_BITS (type) = - (B_TYPE *) TYPE_ZALLOC (type, B_BYTES (nfields)); - - TYPE_FIELD_PROTECTED_BITS (type) = - (B_TYPE *) TYPE_ZALLOC (type, B_BYTES (nfields)); - - TYPE_FIELD_IGNORE_BITS (type) = - (B_TYPE *) TYPE_ZALLOC (type, B_BYTES (nfields)); - } - /* Copy the saved-up fields into the field vector. Start from the head of the list, adding to the tail of the field array, so that they end up in the same order in the array in which they were @@ -3313,31 +3299,6 @@ attach_fields_to_type (struct stab_field_info *fip, struct type *type, while (nfields-- > 0) { type->field (nfields) = fip->list->field; - switch (fip->list->visibility) - { - case VISIBILITY_PRIVATE: - SET_TYPE_FIELD_PRIVATE (type, nfields); - break; - - case VISIBILITY_PROTECTED: - SET_TYPE_FIELD_PROTECTED (type, nfields); - break; - - case VISIBILITY_IGNORE: - SET_TYPE_FIELD_IGNORE (type, nfields); - break; - - case VISIBILITY_PUBLIC: - break; - - default: - /* Unknown visibility. Complain and treat it as public. */ - { - complaint (_("Unknown visibility `%c' for field"), - fip->list->visibility); - } - break; - } fip->list = fip->list->next; } return 1; From patchwork Fri Nov 3 16:09:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79026 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 85ABB385B53E for ; Fri, 3 Nov 2023 16:09:57 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd32.google.com (mail-io1-xd32.google.com [IPv6:2607:f8b0:4864:20::d32]) by sourceware.org (Postfix) with ESMTPS id 522313858C41 for ; Fri, 3 Nov 2023 16:09:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 522313858C41 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 522313858C41 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d32 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027779; cv=none; b=D9drrzZxlZyKFMGrYa+oSFziht4qUhHej2gfd6jE/LPdpbsXvcNQTxVJJ1PspMIiCUjCjJcgsd7jikVYZ6kV9pU6pcfnQhVirbgYtwuoAn+0NPkeWr9XLZPkABc8p4RjuPV05If3PAGFw2pN7OR/bzqmXIHEquUC0K7UPYAiz4k= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027779; c=relaxed/simple; bh=aslRUCeE+kkltGzCCMzPCuw/Jrv+tSiDoDHEv7OMaZw=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=E05FjVUS/W3UdAolGIILz19GpEA2CGF+OxT3+QyByPgCALPd7kHG4RXJxiBbLQKFhPk1VFBe9Cga+mVG/osluI4lnMpW+HqKNUtZsgQSQ1Mfd9Lp4Yz5u+nRmu3QHFjLief81ZBjF4oR3Ex2FlXErm+TLgj1V8grt4dUqDunyuo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-io1-xd32.google.com with SMTP id ca18e2360f4ac-7a6889f33b9so75643239f.0 for ; Fri, 03 Nov 2023 09:09:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1699027770; x=1699632570; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=JM44PxIBjglHV/FoqGMVfKmO8FHk1RLxTl3UweBgghk=; b=XgzHOlJo3OpjJThn4mp6iO5iZr9EuBM4iBRDCcFz9hgsqdGLq/nB8vmaArwturRb19 J5KosqY8Befb/TDzLklLMhXy4iz5cD9IwnOanNSH51j6bqy1cVhvwBqHdqKiS9zba7ia QAxWEfsbjFKB+Mvkix0XC4TPwBf0IkOwTYu5bAyuRJ9JQ4zx2zHvwkMjIuvAQfHNIUjw z7GJvXZuv1yDlu0Esvcr16fxbyGh+C2sEVJNP2+saj67F76Mg2Fe7PNKfGalj0F6lqL0 mbAC739kP3zdnO4PVkcsOxCj1+XguNsSwrRZJXrUvdm7zK33xzf3AzoV+PM9ed9WNlje 79og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699027770; x=1699632570; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JM44PxIBjglHV/FoqGMVfKmO8FHk1RLxTl3UweBgghk=; b=wD+IXFv0r0UcNcHO/xfogqSfKavOFeHGmzOs0+coJiPjuBydT/d2XETn1uSukk4i91 7Vdua+9QvpWVS1Iex2a4FUJrTUKFQyLLKYSFaJzqHwROWq5JLJBj3SHN2DmchrqNfjyK YMzI/JO4a7wHsKehY8YgUF7TfbBrMeHAPFMXZ+KXYOaTX8B9oCXBcPwKdrwRYsHG2h3d g/to5Tnp8yKkf9V+BbXK8b4h5S4IytIrNoa7bVhjvycReBfKoUh5or5lTELi7dFwnjkO 7Y7yy0S6hO9PFlPE+jowfCo1ZSKlFcUwHTGDHsoOqsSLAdxPs7jTHs3tyY8WBP+SfNTX TCrw== X-Gm-Message-State: AOJu0YyQzWB9Kq6h9DjIu9oDze8S0aFJYOMuU/wL9Fx1HXEmylggOuHK vXOFgt8IY3LWMaQAptvqBV+85g== X-Google-Smtp-Source: AGHT+IGZR5hqWXIzCM+mM0YBfU9WWjAtD9G2utDrJbg4y6ZxKhe6JYqj47pq8fss04/Yp4cGTE+AIQ== X-Received: by 2002:a05:6602:341a:b0:79f:d04d:ce5a with SMTP id n26-20020a056602341a00b0079fd04dce5amr27245851ioz.2.1699027770547; Fri, 03 Nov 2023 09:09:30 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id gu16-20020a0566382e1000b0042b3dcb1106sm581839jab.47.2023.11.03.09.09.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 09:09:30 -0700 (PDT) From: Tom Tromey Date: Fri, 03 Nov 2023 10:09:26 -0600 Subject: [PATCH v3 4/9] Add field::is_public MIME-Version: 1.0 Message-Id: <20231103-field-bits-v3-4-273c40bcaf3d@adacore.com> References: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> In-Reply-To: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> To: gdb-patches@sourceware.org Cc: Simon Marchi , Keith Seitz X-Mailer: b4 0.12.4 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org This adds a field::is_public convenience method, and updates one spot to use it. Acked-By: Simon Marchi Reviewed-by: Keith Seitz --- gdb/gdbtypes.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index f5dd2b8076d..b6a693f1316 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -686,6 +686,10 @@ struct field enum accessibility accessibility () const { return m_accessibility; } + /* True if this field is 'public'. */ + bool is_public () const + { return m_accessibility == accessibility::PUBLIC; } + /* True if this field is 'private'. */ bool is_private () const { return m_accessibility == accessibility::PRIVATE; } @@ -1964,7 +1968,7 @@ extern void set_type_vptr_basetype (struct type *, struct type *); #define TYPE_BASECLASS_NAME(thistype,index) (thistype->field (index).name ()) #define TYPE_BASECLASS_BITPOS(thistype,index) (thistype->field (index).loc_bitpos ()) #define BASETYPE_VIA_PUBLIC(thistype, index) \ - ((!TYPE_FIELD_PRIVATE(thistype, index)) && (!TYPE_FIELD_PROTECTED(thistype, index))) + ((thistype)->field (index).is_public ()) #define TYPE_CPLUS_DYNAMIC(thistype) TYPE_CPLUS_SPECIFIC (thistype)->is_dynamic #define BASETYPE_VIA_VIRTUAL(thistype, index) \ From patchwork Fri Nov 3 16:09:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79028 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EB87B38618F2 for ; Fri, 3 Nov 2023 16:10:08 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x135.google.com (mail-il1-x135.google.com [IPv6:2607:f8b0:4864:20::135]) by sourceware.org (Postfix) with ESMTPS id F33EF3858C5E for ; Fri, 3 Nov 2023 16:09:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F33EF3858C5E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F33EF3858C5E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::135 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027780; cv=none; b=wPeM+/t/EKq9ZYH2twFi0bGDDvLL6Km+SBYWGoi5xRa0GjCk1Jv0nXcKvpLiZVAmoUx3Bx1hvUW/Z+XaacDDtwaQjJtDnnDBkb/BWJMMFA3NZ8Naogoue8Jq9RtCbKLNm+qJJfjXxPBK0ZUe0WZnPP9bCfShv49hFUsJXWuqi8o= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027780; c=relaxed/simple; bh=uTVxW6xF+d7yrrejmALzSBgsGckSYo8IBdugJOTSAdI=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=ruQ579mscT15pxpStDfZt2cJDgh9P7VvjVpEfc2AT4CdM3emAmhVy4pRwmrHOvAyZH7GMUuO31arnJz8BInrn885Odw0EGVb699PCJL83ahlpupp0R1puHihUqeS79IYpCGXJh/Cm7u1Z5pP9D1ydbTPewJgTOt+nbf667dny10= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x135.google.com with SMTP id e9e14a558f8ab-3576e74ae9dso7993495ab.3 for ; Fri, 03 Nov 2023 09:09:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1699027771; x=1699632571; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=k8srT0+vQN8LRQn84mkx5EsDJps6QFhlSj6v3cjCwX4=; b=QfGIciGiXrgERoUWMSLpmOqu/xjsAXzTNEVnFkGPeZ8mXm6VHrZhfR0hC1Hq8W+5ze mndNA4AS7FVTNyc1e93DoctExaPGdEOzwIV3rw2zi96y6RpgoiPuh4/soF8zskjd16kZ rKFlBYnsmEoB0oSMAFzR3/hhMKj/so+lO3nlZBlXoJJZbhezzqUanVA7T1qadJcyQUPX 41B1tIbNV8r/o4GomX23K0Nt2l3OG29H+84svtEjt4j+4HAocVGPyECHYymJhF9n3Ecd hkkIGFys7tCEFp5IVq8oywLvjjCHK0/gZH/04jIK8QXf6BdPJRtnXM95vgTMTbmjUXJZ Amqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699027771; x=1699632571; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=k8srT0+vQN8LRQn84mkx5EsDJps6QFhlSj6v3cjCwX4=; b=lk0t9VgY+EUN0niTxK5GFtBkbkoiQ4VUoqwRH6mX0eLdZdxQSsUQZhmQMXUbIPHTkt zUk2HIbh3sjxYmmVgecSc+GQywt3FBgmoqptkarFH9hpueJiwQKCVpm+/xGgQzt1mBlp FuzW6cMbWcE6Axv+bclVk3a0+NGcM6NoDZM4Uly9yoNT0eU+ku8NsFrkAyuiHiUgmmWX Pm+OavJDeABHN1bUoxLb3Wc7JQrZkjQ5q6K90QEINnAQZ0kBsZc8QC6oZnDDzzlWn3iT GEqvXj+8vtKTwMUHZkMEq+gPAUhBEUAvgBVMKVX0fu3WpA3uEmIgObI3FjDB1ow0rd2k R16w== X-Gm-Message-State: AOJu0YxQBKcNpyr/6LSwCM1BVuBbr6hqryqk6hvKOYNJqnCGDtDkDOxJ g+q4HL1Jr9PXSgGTK6zWgyVDxA== X-Google-Smtp-Source: AGHT+IFpVmgKeC9aXaU6OEsFR5VDJwYjVl+B0ge1yUG25nIs/ADRYyf4ZOjKeNM70xoZTD27HqajKA== X-Received: by 2002:a05:6602:168a:b0:792:82f8:749d with SMTP id s10-20020a056602168a00b0079282f8749dmr27242744iow.10.1699027771232; Fri, 03 Nov 2023 09:09:31 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id gu16-20020a0566382e1000b0042b3dcb1106sm581839jab.47.2023.11.03.09.09.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 09:09:30 -0700 (PDT) From: Tom Tromey Date: Fri, 03 Nov 2023 10:09:27 -0600 Subject: [PATCH v3 5/9] Remove some QUIT calls from need_access_label_p MIME-Version: 1.0 Message-Id: <20231103-field-bits-v3-5-273c40bcaf3d@adacore.com> References: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> In-Reply-To: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> To: gdb-patches@sourceware.org Cc: Simon Marchi , Keith Seitz X-Mailer: b4 0.12.4 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org I think these invocations of QUIT in need_access_label_p are overkill. QUIT is already called from its caller. This just removes them. Acked-By: Simon Marchi Reviewed-by: Keith Seitz --- gdb/c-typeprint.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c index e45098268c0..241fbca49b7 100644 --- a/gdb/c-typeprint.c +++ b/gdb/c-typeprint.c @@ -911,31 +911,25 @@ need_access_label_p (struct type *type) { if (type->is_declared_class ()) { - QUIT; for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) if (!TYPE_FIELD_PRIVATE (type, i)) return true; - QUIT; for (int j = 0; j < TYPE_NFN_FIELDS (type); j++) for (int i = 0; i < TYPE_FN_FIELDLIST_LENGTH (type, j); i++) if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, j), i)) return true; - QUIT; for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); ++i) if (!TYPE_TYPEDEF_FIELD_PRIVATE (type, i)) return true; } else { - QUIT; for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i)) return true; - QUIT; for (int j = 0; j < TYPE_NFN_FIELDS (type); j++) { - QUIT; for (int i = 0; i < TYPE_FN_FIELDLIST_LENGTH (type, j); i++) if (TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type, j), i) @@ -944,7 +938,6 @@ need_access_label_p (struct type *type) i)) return true; } - QUIT; for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); ++i) if (TYPE_TYPEDEF_FIELD_PROTECTED (type, i) || TYPE_TYPEDEF_FIELD_PRIVATE (type, i)) From patchwork Fri Nov 3 16:09:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79034 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 90675385B53E for ; Fri, 3 Nov 2023 16:10:46 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd32.google.com (mail-io1-xd32.google.com [IPv6:2607:f8b0:4864:20::d32]) by sourceware.org (Postfix) with ESMTPS id EFF033858C66 for ; Fri, 3 Nov 2023 16:09:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EFF033858C66 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EFF033858C66 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d32 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027789; cv=none; b=sU4OnZD524wi4CAtW7RtDuUUbe5fzAOueio0TVxSPvx66J200BaMWKe8xn08TEDkLXfdPpuYR+YC/xgP6/3X4hvyEZNYw11x5gp/oQC16G+G9Bk9PIuBzHwJdz01vdwxXPKGakfMUIEauobLD0oOe8AYdJycKJOY0x1PqPLZtsE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027789; c=relaxed/simple; bh=/a4l6wJIn7q9ckNDA4tCXWMP47Y6NZ1oRRW29dFANNk=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=AGpNVMDMZ+gFcFyuHQMHVW/4MlIRQMV0N2oPC0YtjcRrwRRbH7db81ia8/RJeSKgpdqAMBJZ9tji66mHUDhbHRfZLtWNoK/nGFhvOigehaSwmXhoOAkS4MxjKXQB9HqxIuH06/itDq6P0mNqzvfWi6fu6UXi9oxWxCdAkAXdlVc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-io1-xd32.google.com with SMTP id ca18e2360f4ac-7a69a71cc1dso80869039f.0 for ; Fri, 03 Nov 2023 09:09:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1699027772; x=1699632572; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Xq78oYAzpdT1CRrDqTNFJB5lRwDsub9hRe34kbw8P7k=; b=Sw+D/VZovaifzkE4tDRSHe2RrlkTIUMEm0/erRXvBf4mUpqZZxYxfpo9H1duLUAY3x AydLh0ILNzBag7oBwiE71fg5MoTaGL+0Ir6csPmuraRIGEadz8dp47tptxver2RmDecz igPXJzy1OpQn49Z/TQ7LrUoVa2zq3b6O2XhzUy6ogaObaNiIZ4XYrX7aRfVnioy5AlYo y92RSsAXH7Ko3rJk2PXJhoRR6tQdCWjRkSYNxSYrJrjwAj4e8wYi4SAP8z8OwtKcmyeO 1eO/3lSCg16ZK0ymH5wGtSRYAbk2HYyR7DYfaVk/kFLCgVgY/+rzjRBQ+DSg4qhBulId bo0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699027772; x=1699632572; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Xq78oYAzpdT1CRrDqTNFJB5lRwDsub9hRe34kbw8P7k=; b=Gd5A37yildcl19pfGv0abfQ4niEfK33HyHrmF1KB0bKUOahErm+NEPyG/X4Yz8tenE jxAG3fhEo+U5UN3QcCXdLsGozGO7ygoljXb+BMAvyokdgxPGB7dqZ25V7kkvAgdhP4Mq 4yaAyfblaMhO/06Xo6eRPC+ChPdchetwJp0ROs2sLzssEl1SD1qGHjLbDwmDQUoTfF5U CZUvokllnSQn+xLTezCHhfJNpheah8MaRuVoVhv6ejyX9lJI/Aaf+wkzjCa06ks17T7K 9RyJgljOqd67wzplQGRokxswdHoQAr4pWs+tr8xBWaUNKuNn27V/mjt2O+u9Bt6sxH0d QtuA== X-Gm-Message-State: AOJu0YynEYbDdkU8AfysNgr2jW2So/7P2bpUN0t6JON+fhCh7qvHeXD4 PKBKUWCac43M6q8nx5zRrD6Ftg== X-Google-Smtp-Source: AGHT+IGz8e/8hthRh380jeuGdVcmMOeySEtBxcUd9iQWZai3ffT6vMDUr8LSPQEY10kqgl1xvtja9A== X-Received: by 2002:a05:6602:29cf:b0:78b:d0a9:34fb with SMTP id z15-20020a05660229cf00b0078bd0a934fbmr24350381ioq.20.1699027772142; Fri, 03 Nov 2023 09:09:32 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id gu16-20020a0566382e1000b0042b3dcb1106sm581839jab.47.2023.11.03.09.09.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 09:09:31 -0700 (PDT) From: Tom Tromey Date: Fri, 03 Nov 2023 10:09:28 -0600 Subject: [PATCH v3 6/9] Remove some type field accessor macros MIME-Version: 1.0 Message-Id: <20231103-field-bits-v3-6-273c40bcaf3d@adacore.com> References: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> In-Reply-To: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> To: gdb-patches@sourceware.org Cc: Simon Marchi , Keith Seitz X-Mailer: b4 0.12.4 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org This removes TYPE_FIELD_PRIVATE, TYPE_FIELD_PROTECTED, TYPE_FIELD_IGNORE, and TYPE_FIELD_VIRTUAL. In c-varobj.c, match_accessibility can be removed entirely now. Note that the comment before this function was incorrect. Acked-By: Simon Marchi Reviewed-by: Keith Seitz --- gdb/ada-valprint.c | 2 +- gdb/c-typeprint.c | 10 +++++----- gdb/c-varobj.c | 31 ++++++++----------------------- gdb/compile/compile-cplus-types.c | 7 ++++--- gdb/cp-valprint.c | 4 ++-- gdb/gdbtypes.c | 27 ++++++++++++++------------- gdb/gdbtypes.h | 9 --------- gdb/p-typeprint.c | 6 ++++-- gdb/p-valprint.c | 4 ++-- 9 files changed, 40 insertions(+), 60 deletions(-) diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c index b32f1e506d1..b981be89b18 100644 --- a/gdb/ada-valprint.c +++ b/gdb/ada-valprint.c @@ -627,7 +627,7 @@ print_field_values (struct value *value, struct value *outer_value, { /* Bitfields require special handling, especially due to byte order problems. */ - if (HAVE_CPLUS_STRUCT (type) && TYPE_FIELD_IGNORE (type, i)) + if (type->field (i).is_ignored ()) { fputs_styled (_(""), metadata_style.style (), stream); diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c index 241fbca49b7..4a0c6950b0c 100644 --- a/gdb/c-typeprint.c +++ b/gdb/c-typeprint.c @@ -238,7 +238,7 @@ cp_type_print_derivation_info (struct ui_file *stream, gdb_puts (i == 0 ? ": " : ", ", stream); gdb_printf (stream, "%s%s ", BASETYPE_VIA_PUBLIC (type, i) - ? "public" : (TYPE_FIELD_PROTECTED (type, i) + ? "public" : (type->field (i).is_protected () ? "protected" : "private"), BASETYPE_VIA_VIRTUAL (type, i) ? " virtual" : ""); name = TYPE_BASECLASS (type, i)->name (); @@ -912,7 +912,7 @@ need_access_label_p (struct type *type) if (type->is_declared_class ()) { for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) - if (!TYPE_FIELD_PRIVATE (type, i)) + if (!type->field (i).is_private ()) return true; for (int j = 0; j < TYPE_NFN_FIELDS (type); j++) for (int i = 0; i < TYPE_FN_FIELDLIST_LENGTH (type, j); i++) @@ -926,7 +926,7 @@ need_access_label_p (struct type *type) else { for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) - if (TYPE_FIELD_PRIVATE (type, i) || TYPE_FIELD_PROTECTED (type, i)) + if (!type->field (i).is_public ()) return true; for (int j = 0; j < TYPE_NFN_FIELDS (type); j++) { @@ -1102,8 +1102,8 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream, { section_type = output_access_specifier (stream, section_type, level, - TYPE_FIELD_PROTECTED (type, i), - TYPE_FIELD_PRIVATE (type, i), flags); + type->field (i).is_protected (), + type->field (i).is_private (), flags); } bool is_static = type->field (i).is_static (); diff --git a/gdb/c-varobj.c b/gdb/c-varobj.c index 543cd585eb2..05b5bd7fa23 100644 --- a/gdb/c-varobj.c +++ b/gdb/c-varobj.c @@ -647,16 +647,18 @@ cplus_class_num_children (struct type *type, int children[3]) vptr_fieldno = get_vptr_fieldno (type, &basetype); for (i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) { + field &fld = type->field (i); + /* If we have a virtual table pointer, omit it. Even if virtual table pointers are not specifically marked in the debug info, they should be artificial. */ if ((type == basetype && i == vptr_fieldno) - || type->field (i).is_artificial ()) + || fld.is_artificial ()) continue; - if (TYPE_FIELD_PROTECTED (type, i)) + if (fld.is_protected ()) children[v_protected]++; - else if (TYPE_FIELD_PRIVATE (type, i)) + else if (fld.is_private ()) children[v_private]++; else children[v_public]++; @@ -669,23 +671,6 @@ cplus_name_of_variable (const struct varobj *parent) return c_name_of_variable (parent); } -/* Check if field INDEX of TYPE has the specified accessibility. - Return 0 if so and 1 otherwise. */ - -static int -match_accessibility (struct type *type, int index, enum accessibility acc) -{ - if (acc == accessibility::PRIVATE && TYPE_FIELD_PRIVATE (type, index)) - return 1; - else if (acc == accessibility::PROTECTED && TYPE_FIELD_PROTECTED (type, index)) - return 1; - else if (acc == accessibility::PUBLIC && !TYPE_FIELD_PRIVATE (type, index) - && !TYPE_FIELD_PROTECTED (type, index)) - return 1; - else - return 0; -} - static void cplus_describe_child (const struct varobj *parent, int index, std::string *cname, struct value **cvalue, struct type **ctype, @@ -751,9 +736,9 @@ cplus_describe_child (const struct varobj *parent, int index, if ((type == basetype && type_index == vptr_fieldno) || type->field (type_index).is_artificial ()) ; /* ignore vptr */ - else if (match_accessibility (type, type_index, acc)) - --index; - ++type_index; + else if (type->field (type_index).accessibility () == acc) + --index; + ++type_index; } --type_index; diff --git a/gdb/compile/compile-cplus-types.c b/gdb/compile/compile-cplus-types.c index ac27e83618b..a59d77b76a9 100644 --- a/gdb/compile/compile-cplus-types.c +++ b/gdb/compile/compile-cplus-types.c @@ -73,9 +73,10 @@ compile_cplus_instance::decl_name (const char *natural) static enum gcc_cp_symbol_kind get_field_access_flag (const struct type *type, int num) { - if (TYPE_FIELD_PROTECTED (type, num)) + field &fld = type->field (num); + if (fld.is_protected ()) return GCC_CP_ACCESS_PROTECTED; - else if (TYPE_FIELD_PRIVATE (type, num)) + else if (fld.is_private ()) return GCC_CP_ACCESS_PRIVATE; /* GDB assumes everything else is public. */ @@ -583,7 +584,7 @@ compile_cplus_convert_struct_or_union_members { const char *field_name = type->field (i).name (); - if (TYPE_FIELD_IGNORE (type, i) + if (type->field (i).is_ignored () || type->field (i).is_artificial ()) continue; diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c index 820a761054a..a803c786d2b 100644 --- a/gdb/cp-valprint.c +++ b/gdb/cp-valprint.c @@ -265,7 +265,7 @@ cp_print_value_fields (struct value *val, struct ui_file *stream, /* Bitfields require special handling, especially due to byte order problems. */ - if (TYPE_FIELD_IGNORE (type, i)) + if (type->field (i).is_ignored ()) { fputs_styled ("", metadata_style.style (), stream); @@ -290,7 +290,7 @@ cp_print_value_fields (struct value *val, struct ui_file *stream, } else { - if (TYPE_FIELD_IGNORE (type, i)) + if (type->field (i).is_ignored ()) { fputs_styled ("", metadata_style.style (), stream); diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index e3a12a45afd..d40de91001f 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5229,33 +5229,34 @@ recursive_dump_type (struct type *type, int spaces) gdb_printf ("%s\n", host_address_to_string (type->fields ())); for (idx = 0; idx < type->num_fields (); idx++) { + field &fld = type->field (idx); if (type->code () == TYPE_CODE_ENUM) gdb_printf ("%*s[%d] enumval %s type ", spaces + 2, "", - idx, plongest (type->field (idx).loc_enumval ())); + idx, plongest (fld.loc_enumval ())); else gdb_printf ("%*s[%d] bitpos %s bitsize %d type ", spaces + 2, "", - idx, plongest (type->field (idx).loc_bitpos ()), - type->field (idx).bitsize ()); + idx, plongest (fld.loc_bitpos ()), + fld.bitsize ()); gdb_printf ("%s name '%s' (%s)", - host_address_to_string (type->field (idx).type ()), - type->field (idx).name () != NULL - ? type->field (idx).name () + host_address_to_string (fld.type ()), + fld.name () != NULL + ? fld.name () : "", - host_address_to_string (type->field (idx).name ())); - if (TYPE_FIELD_VIRTUAL (type, idx)) + host_address_to_string (fld.name ())); + if (fld.is_virtual ()) gdb_printf (" virtual"); - if (TYPE_FIELD_PRIVATE (type, idx)) + if (fld.is_private ()) gdb_printf (" private"); - else if (TYPE_FIELD_PROTECTED (type, idx)) + else if (fld.is_protected ()) gdb_printf (" protected"); - else if (TYPE_FIELD_IGNORE (type, idx)) + else if (fld.is_ignored ()) gdb_printf (" ignored"); gdb_printf ("\n"); - if (type->field (idx).type () != NULL) + if (fld.type () != NULL) { - recursive_dump_type (type->field (idx).type (), spaces + 4); + recursive_dump_type (fld.type (), spaces + 4); } } if (type->code () == TYPE_CODE_RANGE) diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index b6a693f1316..6c011a56dd8 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1974,15 +1974,6 @@ extern void set_type_vptr_basetype (struct type *, struct type *); #define BASETYPE_VIA_VIRTUAL(thistype, index) \ ((thistype)->field (index).is_virtual ()) -#define TYPE_FIELD_PRIVATE(thistype, n) \ - ((thistype)->field (n).is_private ()) -#define TYPE_FIELD_PROTECTED(thistype, n) \ - ((thistype)->field (n).is_protected ()) -#define TYPE_FIELD_IGNORE(thistype, n) \ - ((thistype)->field (n).is_ignored ()) -#define TYPE_FIELD_VIRTUAL(thistype, n) \ - ((thistype)->field (n).is_virtual ()) - #define TYPE_FN_FIELDLISTS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists #define TYPE_FN_FIELDLIST(thistype, n) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists[n] #define TYPE_FN_FIELDLIST1(thistype, n) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists[n].fn_fields diff --git a/gdb/p-typeprint.c b/gdb/p-typeprint.c index 41058a8b59e..b5d66269d6e 100644 --- a/gdb/p-typeprint.c +++ b/gdb/p-typeprint.c @@ -486,7 +486,9 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int if (HAVE_CPLUS_STRUCT (type)) { - if (TYPE_FIELD_PROTECTED (type, i)) + field &fld = type->field (i); + + if (fld.is_protected ()) { if (section_type != s_protected) { @@ -495,7 +497,7 @@ pascal_language::type_print_base (struct type *type, struct ui_file *stream, int level + 2, ""); } } - else if (TYPE_FIELD_PRIVATE (type, i)) + else if (fld.is_private ()) { if (section_type != s_private) { diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c index fb9386293a6..05601622560 100644 --- a/gdb/p-valprint.c +++ b/gdb/p-valprint.c @@ -604,7 +604,7 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, /* Bitfields require special handling, especially due to byte order problems. */ - if (TYPE_FIELD_IGNORE (type, i)) + if (type->field (i).is_ignored ()) { fputs_styled ("", metadata_style.style (), stream); @@ -629,7 +629,7 @@ pascal_object_print_value_fields (struct value *val, struct ui_file *stream, } else { - if (TYPE_FIELD_IGNORE (type, i)) + if (type->field (i).is_ignored ()) { fputs_styled ("", metadata_style.style (), stream); From patchwork Fri Nov 3 16:09:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79030 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EEFC7387544C for ; Fri, 3 Nov 2023 16:10:21 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2b.google.com (mail-io1-xd2b.google.com [IPv6:2607:f8b0:4864:20::d2b]) by sourceware.org (Postfix) with ESMTPS id A6B203858C74 for ; Fri, 3 Nov 2023 16:09:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A6B203858C74 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A6B203858C74 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027780; cv=none; b=BeVEPjutHCAyNXHh/2D9hZap2XkFZXvKwVhEK3oOK5butBwQYHOyEjU1EFrhceYl8ZQoe2sCX+W0LcOW+abHYGlANvmyRD2AT2eGGPmlHrrayCzjDtY7nIQ85RDeltUt5pBiEqHzRuWALulJIJgUaY+n3tDD79m9UDUjIeqIKng= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027780; c=relaxed/simple; bh=BrEt6q6BYrrYAmu7kLlxyUdEssMmbA2+TulAiTlcLyI=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=uxZIb/oDnQGD904bMBHtWtzt62QCwuR8RcSQS531Fl+/jZ5yO54y1q0UCV+4UwINuCqqf+QA3pL3WMMkx9c/u3Jqncfco+VxVJFDsv/mkCoueV3cY/4V9UrE2CpLn7wZ0NyIQ7UJC+oiBDDyLZ0cQ/i2gxTaq9+Q9piR7ZFBbSs= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-io1-xd2b.google.com with SMTP id ca18e2360f4ac-7a68d1698adso63516739f.1 for ; Fri, 03 Nov 2023 09:09:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1699027773; x=1699632573; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=wUZ7iCLerSz8NkmPKniMfZc/Z7F4lk1NTBrfC8T9X/Q=; b=F7N8KxGhnsKdqlL2J1p3+SGR5/FwKnIidMasMc+ZZu5G3kDYfNu3zzJNZSet9r1jrK +MHSOxZcoliP5ypCwRiqsPOU4BeJNU6jkq1Zx0+PLvNfwvZTeoitZ8Rcr8weivcazUwf uL6l9/mBoV0wT2feGkCevwfpTeQbuYiNVcow+h6qlTnOHM29Rg2OwBR7z1Xb2coqIshC RW99X4H8gyvyyzwxht9tf9MLad6ejnhucLMZvVx1fzk9eEJ0IHNjl5dMRqRpv7Ti8reZ v4pNUgOD3lgknlCHVskmqotHIZ80v6hUoGUa3wFNFQTmIiAs+0jTP+jOsBv5ezgvLY6w aN4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699027773; x=1699632573; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wUZ7iCLerSz8NkmPKniMfZc/Z7F4lk1NTBrfC8T9X/Q=; b=vqS7Tn1g3KIXVT8symYOjtyUbwfYQbUeYqVTL/P533Q9Z6eY8id9LjYhe1NhGL9ImP 4IBqIZ04avCDC+HOMde3gRORvnUl6Jpn4/xVKj0qwpJnLQfBuDWhFTAfw+gWziZ7dcFd HCWVApyo4C8oPjWLnqPToq4FCVlfJsuENpxMAj+cQmJsLCvtDI9QJdtpIKrMTekSK4Kt HeG44M/0M6UAZFPPLZBpKcC9nXXxj+dUrJk2iW16EUb6i1zj+322/vahQJChREn4J/LR hTPUegoE+yyEUxaFUW+vs+t0B2uFCm/UFP5XC98QA2CtWsRHR5WEC94PUj7cOfSqf30D pG1w== X-Gm-Message-State: AOJu0YwTxfguT8PBnrwvHS0uH5W7J2jeRjIGieQY6ctT1YW/7ZyeXpvl sUt9HlKASOzG46ICBB8CRn3SPA== X-Google-Smtp-Source: AGHT+IHxaAomcXG93XeY3yNFgt8/sWPxZl5aF19mpouVsZe8lBp04qGVJxPhiTrBOqb1rpiPCw4GGg== X-Received: by 2002:a05:6602:1503:b0:790:aed5:d0b0 with SMTP id g3-20020a056602150300b00790aed5d0b0mr3199393iow.0.1699027772837; Fri, 03 Nov 2023 09:09:32 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id gu16-20020a0566382e1000b0042b3dcb1106sm581839jab.47.2023.11.03.09.09.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 09:09:32 -0700 (PDT) From: Tom Tromey Date: Fri, 03 Nov 2023 10:09:29 -0600 Subject: [PATCH v3 7/9] Remove char-based bitfield macros MIME-Version: 1.0 Message-Id: <20231103-field-bits-v3-7-273c40bcaf3d@adacore.com> References: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> In-Reply-To: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> To: gdb-patches@sourceware.org Cc: Simon Marchi , Keith Seitz X-Mailer: b4 0.12.4 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org This removes the char-based bitfield macros from gdbtypes.h, as they are no longer used. Acked-By: Simon Marchi Reviewed-by: Keith Seitz --- gdb/gdbtypes.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 6c011a56dd8..bec69bdc3d1 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -66,15 +66,6 @@ struct dwarf2_per_cu_data; struct dwarf2_per_objfile; struct dwarf2_property_baton; -/* Some macros for char-based bitfields. */ - -#define B_SET(a,x) ((a)[(x)>>3] |= (1 << ((x)&7))) -#define B_CLR(a,x) ((a)[(x)>>3] &= ~(1 << ((x)&7))) -#define B_TST(a,x) ((a)[(x)>>3] & (1 << ((x)&7))) -#define B_TYPE unsigned char -#define B_BYTES(x) ( 1 + ((x)>>3) ) -#define B_CLRALL(a,x) memset ((a), 0, B_BYTES(x)) - /* * Different kinds of data types are distinguished by the `code' field. */ From patchwork Fri Nov 3 16:09:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79031 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 720BE38346B7 for ; Fri, 3 Nov 2023 16:10:26 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x134.google.com (mail-il1-x134.google.com [IPv6:2607:f8b0:4864:20::134]) by sourceware.org (Postfix) with ESMTPS id 636CA3858C00 for ; Fri, 3 Nov 2023 16:09:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 636CA3858C00 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 636CA3858C00 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::134 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027780; cv=none; b=AjvwklQSPElarjuS3qE5ktX442hlOMhvK98+TXoIAZfIESiEjVGJfu7yhASXfiZbEq4x8nmXRc/e4wCSdqlhWI7toaYpaDDl3JJUbGs5F79XNa3FRds6yyR/jxGoRB+xGLWmqNHXZSLJm/9VoBZxijSFRmWdOljfxw/hP/9OjAE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027780; c=relaxed/simple; bh=0eVOKMLjBwz/t27iR4UciREFfx+V9oFcscC9MoZkAXg=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=P3xF+j82l8UcIMvwv+hHWynxfOe5Wt+n2AXfKRK4t8ByQe7AK+4rkfUhENEcEakjoWwWsPkpZLmK7UIPY5SXENr9FuC6oBzenbSp6tgXO7Z38hhhUC72ebNJMlPGbZ5/y6UCQVlIeNV8WIAgY/ldqOxaMnpBHqK6FUJK5bwc4cI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x134.google.com with SMTP id e9e14a558f8ab-35903f528e8so8706495ab.1 for ; Fri, 03 Nov 2023 09:09:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1699027773; x=1699632573; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=wRx/YQXmRLOaob/Ot5YJiexUhXR1cyuoGm+O9kgxdmc=; b=goe6eznY5EyZBbE7/g4U/ad/3m4NqM0rEz42zEn9XARkFRUqMA6rXmz8yCsvEeAIJA 3hjDA0wjmM2Lho0ySF/WW6ejqVhge8p7wiofFYqC5eEqS8jPmj6qfLq5td+ResdAgeSQ jFsyqrn93zC1tDvNkJUNxMX814ezEqP6Z5H5WXZqy/Uh938c81S8ZkFzSdHa8cWNaWyF BEhP86RF6psJbIidA471y57XNL/zaLRRD+uxdbofr3Za0Zq4WCMVJjgv7ZaJAS1Nsp9y MKkiGSmU3deBJcG0RDgF8daATLZnVs7s49F688Kbr4dhVGvaWIi2S+cTtZznGNMGoFAb /aLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699027773; x=1699632573; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wRx/YQXmRLOaob/Ot5YJiexUhXR1cyuoGm+O9kgxdmc=; b=g+ob66FKd90O2LKUAT7LytxVRG280+2605hkF5PSebS5ONY69vuH82nCxS/pUKveo6 vDekgt9q68i0aWldx3NJrbBC45CwiBufRmnGDG8o5DKBJXHSxCETdUyFVOu48dX8Btny 8KYyEYJruExo1/2ci13h7bdlX9n62mZpmqQeT2apWju5YcRM8GtpPROjjNQyINb1CTvM SoLwLwv3+V+m6xypFByg0A98ZDKidCPpZ0QEe3Hl+fwY/msAt7NN3I6GuPMj200qdyG6 jhKUgh1TF7YGgQ/slOJrFqGWgmbIDsUExEchkLns80jgNizZc63j3oklHp/TG51bAbZ8 AHLA== X-Gm-Message-State: AOJu0YwTtGn7Y6VY6YQ93ODuzurPs7TSVJBUis3SC7SXfG43w8Zd6+lp 84sOdqO+jSJxI8vCr0lRungoC6xkWwcD78s+EM6npw== X-Google-Smtp-Source: AGHT+IGHFxRCmCiM7X3+ogxBjgY6zWvYSr6rbjmFexj25uiYSpqa2k2gwRB9xrlymhaaLyEVMVtwZw== X-Received: by 2002:a05:6e02:320a:b0:357:d136:7218 with SMTP id cd10-20020a056e02320a00b00357d1367218mr2848409ilb.7.1699027773539; Fri, 03 Nov 2023 09:09:33 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id gu16-20020a0566382e1000b0042b3dcb1106sm581839jab.47.2023.11.03.09.09.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 09:09:33 -0700 (PDT) From: Tom Tromey Date: Fri, 03 Nov 2023 10:09:30 -0600 Subject: [PATCH v3 8/9] Use enum accessibility in types and member functions MIME-Version: 1.0 Message-Id: <20231103-field-bits-v3-8-273c40bcaf3d@adacore.com> References: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> In-Reply-To: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> To: gdb-patches@sourceware.org Cc: Simon Marchi , Keith Seitz X-Mailer: b4 0.12.4 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org This changes nested types and member functions to use the new 'accessibility' enum, rather than separate private/protected flags. This is done for consistency, but it also lets us simplify some other code in the next patch. Acked-By: Simon Marchi Reviewed-by: Keith Seitz --- gdb/dwarf2/read.c | 8 ++++---- gdb/gdbtypes.h | 27 ++++++++++++++------------- gdb/stabsread.c | 4 ++-- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index e52ca5b5b83..0d8c24ad5b1 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -11714,10 +11714,10 @@ dwarf2_add_type_defn (struct field_info *fip, struct die_info *die, /* The assumed value if neither private nor protected. */ break; case DW_ACCESS_private: - fp.is_private = 1; + fp.accessibility = accessibility::PRIVATE; break; case DW_ACCESS_protected: - fp.is_protected = 1; + fp.accessibility = accessibility::PROTECTED; break; } @@ -12076,10 +12076,10 @@ dwarf2_add_member_fn (struct field_info *fip, struct die_info *die, switch (accessibility) { case DW_ACCESS_private: - fnp->is_private = 1; + fnp->accessibility = accessibility::PRIVATE; break; case DW_ACCESS_protected: - fnp->is_protected = 1; + fnp->accessibility = accessibility::PROTECTED; break; } diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index bec69bdc3d1..d3c7a206b34 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1611,8 +1611,8 @@ struct fn_field unsigned int is_const:1; unsigned int is_volatile:1; - unsigned int is_private:1; - unsigned int is_protected:1; + /* Accessibility of the field. */ + ENUM_BITFIELD (accessibility) accessibility : 2; unsigned int is_artificial:1; /* * A stub method only has some fields valid (but they are enough @@ -1657,11 +1657,8 @@ struct decl_field struct type *type; - /* * True if this field was declared protected, false otherwise. */ - unsigned int is_protected : 1; - - /* * True if this field was declared private, false otherwise. */ - unsigned int is_private : 1; + /* Accessibility of the field. */ + ENUM_BITFIELD (accessibility) accessibility : 2; }; /* * C++ language-specific information for TYPE_CODE_STRUCT and @@ -1984,8 +1981,10 @@ extern void set_type_vptr_basetype (struct type *, struct type *); #define TYPE_FN_FIELD_ARGS(thisfn, n) (((thisfn)[n].type)->fields ()) #define TYPE_FN_FIELD_CONST(thisfn, n) ((thisfn)[n].is_const) #define TYPE_FN_FIELD_VOLATILE(thisfn, n) ((thisfn)[n].is_volatile) -#define TYPE_FN_FIELD_PRIVATE(thisfn, n) ((thisfn)[n].is_private) -#define TYPE_FN_FIELD_PROTECTED(thisfn, n) ((thisfn)[n].is_protected) +#define TYPE_FN_FIELD_PRIVATE(thisfn, n) \ + ((thisfn)[n].accessibility == accessibility::PRIVATE) +#define TYPE_FN_FIELD_PROTECTED(thisfn, n) \ + ((thisfn)[n].accessibility == accessibility::PROTECTED) #define TYPE_FN_FIELD_ARTIFICIAL(thisfn, n) ((thisfn)[n].is_artificial) #define TYPE_FN_FIELD_STUB(thisfn, n) ((thisfn)[n].is_stub) #define TYPE_FN_FIELD_CONSTRUCTOR(thisfn, n) ((thisfn)[n].is_constructor) @@ -2008,9 +2007,9 @@ extern void set_type_vptr_basetype (struct type *, struct type *); #define TYPE_TYPEDEF_FIELD_COUNT(thistype) \ TYPE_CPLUS_SPECIFIC (thistype)->typedef_field_count #define TYPE_TYPEDEF_FIELD_PROTECTED(thistype, n) \ - TYPE_TYPEDEF_FIELD (thistype, n).is_protected + (TYPE_TYPEDEF_FIELD (thistype, n).accessibility == accessibility::PROTECTED) #define TYPE_TYPEDEF_FIELD_PRIVATE(thistype, n) \ - TYPE_TYPEDEF_FIELD (thistype, n).is_private + (TYPE_TYPEDEF_FIELD (thistype, n).accessibility == accessibility::PRIVATE) #define TYPE_NESTED_TYPES_ARRAY(thistype) \ TYPE_CPLUS_SPECIFIC (thistype)->nested_types @@ -2023,9 +2022,11 @@ extern void set_type_vptr_basetype (struct type *, struct type *); #define TYPE_NESTED_TYPES_COUNT(thistype) \ TYPE_CPLUS_SPECIFIC (thistype)->nested_types_count #define TYPE_NESTED_TYPES_FIELD_PROTECTED(thistype, n) \ - TYPE_NESTED_TYPES_FIELD (thistype, n).is_protected + (TYPE_NESTED_TYPES_FIELD (thistype, n).accessibility \ + == accessibility::PROTECTED) #define TYPE_NESTED_TYPES_FIELD_PRIVATE(thistype, n) \ - TYPE_NESTED_TYPES_FIELD (thistype, n).is_private + (TYPE_NESTED_TYPES_FIELD (thistype, n).accessibility \ + == accessibility::PRIVATE) #define TYPE_IS_OPAQUE(thistype) \ ((((thistype)->code () == TYPE_CODE_STRUCT) \ diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 334371c2e46..fbf11701337 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -2372,10 +2372,10 @@ read_member_functions (struct stab_field_info *fip, const char **pp, switch (*(*pp)++) { case VISIBILITY_PRIVATE: - new_sublist->fn_field.is_private = 1; + new_sublist->fn_field.accessibility = accessibility::PRIVATE; break; case VISIBILITY_PROTECTED: - new_sublist->fn_field.is_protected = 1; + new_sublist->fn_field.accessibility = accessibility::PROTECTED; break; } From patchwork Fri Nov 3 16:09:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79032 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AF8F73861936 for ; Fri, 3 Nov 2023 16:10:28 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-io1-xd2f.google.com (mail-io1-xd2f.google.com [IPv6:2607:f8b0:4864:20::d2f]) by sourceware.org (Postfix) with ESMTPS id 248063858C27 for ; Fri, 3 Nov 2023 16:09:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 248063858C27 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 248063858C27 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::d2f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027780; cv=none; b=UWO2zcRaqwTAfMbd/rSqVy3NwxTkOcvZOkO+JgrUUFmKHol1ZEWmzWvWdgEmVv5MX+Mupa+AwE/xciJG1Q9PSHLN2iv/raVFaUFwAg9oWig4qzVUr7POPvzlXRsW9nRlMf60+YuKnPz5xeMyuodJvgLnOImzvg0dRJDZRpDC2HM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699027780; c=relaxed/simple; bh=YUlGVAfj/q3mAod5sVdo8C0Ke8RZV9kvD/1f6hnBAFU=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=QYFO1DnqJOWdhd/OLAo5Fj8EYgqmOem3PkT7OqVdbsu46OeJ2VHJhOk9cwwYgKJAVvF46El7E7v6hG/8SGkdBmqjdoKC1ptdm7UYvQ5M1P7Kb9pgErZKGeFGGS62ZQUWEl/F6o6Pv1IE+VrD/nSapRCfODThfQOWjkroCij5LEo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-io1-xd2f.google.com with SMTP id ca18e2360f4ac-7a66b5f7ea7so80521939f.2 for ; Fri, 03 Nov 2023 09:09:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1699027774; x=1699632574; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=9NEWBD8eyoeSmfrLhI70JXdcel2iBAjwc+Uge/2MRFE=; b=FL4QEzu7iSc72CIL+wlD/MoJE0/grPgizHjrhL+BQqmta/ghmi7bk3HDaZKUngRHEX LEYJxyrFsUKxaRtRHpZR2hKj69B1hH5d3dokbCZ1XaiV+8otKBGoHGd8Ygf8lZ/uGUAK c3mmMKkFzIUJZxAeh+Bs3qTWUg/qe5YiWC6HtZH6zWUzraY6jX8bkV/a+IqDsAFCx5GY iufLMYoDg2XgFFv76j1JALeK28PovS88xiAQQL+CF2TJKnHojzJXJyOGmvrfdQinqadX /KvskUEi73hNBqL8+o8rARvHXQ3z/mA+24J+B2r5ydKJBTKwrg1kpPrWB78/2aHxT1fS xW9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699027774; x=1699632574; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9NEWBD8eyoeSmfrLhI70JXdcel2iBAjwc+Uge/2MRFE=; b=GsHoxrM33WnzGvsR4JIwIFLqNJbU/8Be24W1A9VWxvmgVjPwQIG9WWclH2pSSAEzJd 2ELIeZgVJ6SccUWqQj4sH6qsHLZJe9emByizr2kkS/q47KfqDtmpkovOOwGS8v9sks2o YFgk/jo6knUOwz+t1C5hlhlu6JQhVyz5lGjHcLhs0q7YRNJszh/ARh9LBg5mEg4m4hbQ FXIsWWe4RPjAtqXv8pTk3JQlyUGV29wd/pjkLmFOw5E+fQHgwC/8umpJyaaUF2akBw5t TXNjaHlGKTqY7vwqpKWmsWqqEn+KZmEVE8/cwPshiCHATaj1y1PqqfcxnADfpIOsJvNi gc6w== X-Gm-Message-State: AOJu0YyEM/kBYofv3buqYDbqIIJM/OcBLT+EX5/L20IbGwXabxqFk2LC Ra21dgX3w5crNrrFvnm8Ewn9/g== X-Google-Smtp-Source: AGHT+IH8AaKuhCbPorsZlIQkUeCaUmaCaXSBUW9IwdIsiOSjeel+Z0JUAM5lVEoeqdx5aPqlBzCbjA== X-Received: by 2002:a05:6602:2c82:b0:7a9:afab:b979 with SMTP id i2-20020a0566022c8200b007a9afabb979mr26871304iow.15.1699027774250; Fri, 03 Nov 2023 09:09:34 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id gu16-20020a0566382e1000b0042b3dcb1106sm581839jab.47.2023.11.03.09.09.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 09:09:33 -0700 (PDT) From: Tom Tromey Date: Fri, 03 Nov 2023 10:09:31 -0600 Subject: [PATCH v3 9/9] Simplify C++ type-printing MIME-Version: 1.0 Message-Id: <20231103-field-bits-v3-9-273c40bcaf3d@adacore.com> References: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> In-Reply-To: <20231103-field-bits-v3-0-273c40bcaf3d@adacore.com> To: gdb-patches@sourceware.org Cc: Simon Marchi , Keith Seitz X-Mailer: b4 0.12.4 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org The C++ type-printing code had its own variant of the accessibility enum. This patch removes this and changes the code to use the new one from gdbtypes.h. This patch also changes the C++ code to recognize the default accessibility of a class. This makes ptype a bit more C++-like, and lets us remove a chunk of questionable code. Acked-By: Simon Marchi Reviewed-by: Keith Seitz --- gdb/c-typeprint.c | 136 +++++++------------------------ gdb/testsuite/gdb.base/ptype-offsets.exp | 6 -- 2 files changed, 30 insertions(+), 112 deletions(-) diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c index 4a0c6950b0c..3402c783cce 100644 --- a/gdb/c-typeprint.c +++ b/gdb/c-typeprint.c @@ -33,16 +33,6 @@ #include "cp-abi.h" #include "cp-support.h" -/* A list of access specifiers used for printing. */ - -enum access_specifier -{ - s_none, - s_public, - s_private, - s_protected -}; - static void c_type_print_varspec_suffix (struct type *, struct ui_file *, int, int, int, enum language, @@ -866,85 +856,32 @@ print_spaces_filtered_with_print_options /* Output an access specifier to STREAM, if needed. LAST_ACCESS is the last access specifier output (typically returned by this function). */ -static enum access_specifier +static accessibility output_access_specifier (struct ui_file *stream, - enum access_specifier last_access, - int level, bool is_protected, bool is_private, + accessibility last_access, + int level, accessibility new_access, const struct type_print_options *flags) { - if (is_protected) + if (last_access == new_access) + return new_access; + + if (new_access == accessibility::PROTECTED) { - if (last_access != s_protected) - { - last_access = s_protected; - print_spaces_filtered_with_print_options (level + 2, stream, flags); - gdb_printf (stream, "protected:\n"); - } + print_spaces_filtered_with_print_options (level + 2, stream, flags); + gdb_printf (stream, "protected:\n"); } - else if (is_private) + else if (new_access == accessibility::PRIVATE) { - if (last_access != s_private) - { - last_access = s_private; - print_spaces_filtered_with_print_options (level + 2, stream, flags); - gdb_printf (stream, "private:\n"); - } + print_spaces_filtered_with_print_options (level + 2, stream, flags); + gdb_printf (stream, "private:\n"); } else { - if (last_access != s_public) - { - last_access = s_public; - print_spaces_filtered_with_print_options (level + 2, stream, flags); - gdb_printf (stream, "public:\n"); - } + print_spaces_filtered_with_print_options (level + 2, stream, flags); + gdb_printf (stream, "public:\n"); } - return last_access; -} - -/* Return true if an access label (i.e., "public:", "private:", - "protected:") needs to be printed for TYPE. */ - -static bool -need_access_label_p (struct type *type) -{ - if (type->is_declared_class ()) - { - for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) - if (!type->field (i).is_private ()) - return true; - for (int j = 0; j < TYPE_NFN_FIELDS (type); j++) - for (int i = 0; i < TYPE_FN_FIELDLIST_LENGTH (type, j); i++) - if (!TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, - j), i)) - return true; - for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); ++i) - if (!TYPE_TYPEDEF_FIELD_PRIVATE (type, i)) - return true; - } - else - { - for (int i = TYPE_N_BASECLASSES (type); i < type->num_fields (); i++) - if (!type->field (i).is_public ()) - return true; - for (int j = 0; j < TYPE_NFN_FIELDS (type); j++) - { - for (int i = 0; i < TYPE_FN_FIELDLIST_LENGTH (type, j); i++) - if (TYPE_FN_FIELD_PROTECTED (TYPE_FN_FIELDLIST1 (type, - j), i) - || TYPE_FN_FIELD_PRIVATE (TYPE_FN_FIELDLIST1 (type, - j), - i)) - return true; - } - for (int i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); ++i) - if (TYPE_TYPEDEF_FIELD_PROTECTED (type, i) - || TYPE_TYPEDEF_FIELD_PRIVATE (type, i)) - return true; - } - - return false; + return new_access; } /* Helper function that temporarily disables FLAGS->PRINT_OFFSETS, @@ -1067,17 +1004,9 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream, metadata_style.style ().ptr (), nullptr); } - /* Start off with no specific section type, so we can print - one for the first field we find, and use that section type - thereafter until we find another type. */ - - enum access_specifier section_type = s_none; - - /* For a class, if all members are private, there's no need - for a "private:" label; similarly, for a struct or union - masquerading as a class, if all members are public, there's - no need for a "public:" label. */ - bool need_access_label = need_access_label_p (type); + accessibility section_type = (type->is_declared_class () + ? accessibility::PRIVATE + : accessibility::PUBLIC); /* If there is a base class for this type, do not print the field that it occupies. */ @@ -1098,13 +1027,10 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream, || type->field (i).is_artificial ()) continue; - if (need_access_label) - { - section_type = output_access_specifier - (stream, section_type, level, - type->field (i).is_protected (), - type->field (i).is_private (), flags); - } + section_type + = output_access_specifier (stream, section_type, level, + type->field (i).accessibility (), + flags); bool is_static = type->field (i).is_static (); @@ -1176,7 +1102,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream, if (!TYPE_FN_FIELD_ARTIFICIAL (f, j)) real_len++; } - if (real_len > 0 && section_type != s_none) + if (real_len > 0) gdb_printf (stream, "\n"); /* C++: print out the methods. */ @@ -1207,8 +1133,8 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream, QUIT; section_type = output_access_specifier (stream, section_type, level, - TYPE_FN_FIELD_PROTECTED (f, j), - TYPE_FN_FIELD_PRIVATE (f, j), flags); + TYPE_FN_FIELD (f, j).accessibility, + flags); print_spaces_filtered_with_print_options (level + 4, stream, flags); @@ -1334,13 +1260,11 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream, gdb_assert (target->code () == TYPE_CODE_TYPEDEF); target = target->target_type (); - if (need_access_label) - { - section_type = output_access_specifier - (stream, section_type, level, - TYPE_TYPEDEF_FIELD_PROTECTED (type, i), - TYPE_TYPEDEF_FIELD_PRIVATE (type, i), flags); - } + section_type = (output_access_specifier + (stream, section_type, level, + TYPE_TYPEDEF_FIELD (type, i).accessibility, + flags)); + print_spaces_filtered_with_print_options (level + 4, stream, flags); gdb_printf (stream, "typedef "); diff --git a/gdb/testsuite/gdb.base/ptype-offsets.exp b/gdb/testsuite/gdb.base/ptype-offsets.exp index 2cfc70f1686..f36bd2fdedf 100644 --- a/gdb/testsuite/gdb.base/ptype-offsets.exp +++ b/gdb/testsuite/gdb.base/ptype-offsets.exp @@ -36,7 +36,6 @@ if { [prepare_for_testing "failed to prepare" $testfile $srcfile \ gdb_test "ptype /o struct abc" \ [string_to_regexp [multi_line \ "/* offset | size */ type = struct abc \{" \ -" public:" \ "/* 8 | 8 */ void *field1;" \ "/* 16: 0 | 4 */ unsigned int field2 : 1;" \ "/* XXX 7-bit hole */" \ @@ -61,7 +60,6 @@ gdb_test "ptype /o struct abc" \ gdb_test "ptype /ox struct abc" \ [string_to_regexp [multi_line \ "/* offset | size */ type = struct abc {" \ -" public:" \ "/* 0x0008 | 0x0008 */ void *field1;" \ "/* 0x0010: 0x0 | 0x0004 */ unsigned int field2 : 1;" \ "/* XXX 7-bit hole */" \ @@ -86,7 +84,6 @@ gdb_test "ptype /ox struct abc" \ gdb_test "ptype /oTM struct abc" \ [string_to_regexp [multi_line \ "/* offset | size */ type = struct abc \{" \ -" public:" \ "/* 8 | 8 */ void *field1;" \ "/* 16: 0 | 4 */ unsigned int field2 : 1;" \ "/* XXX 7-bit hole */" \ @@ -116,7 +113,6 @@ gdb_test "ptype /oTM struct abc" \ gdb_test "ptype /TMo struct abc" \ [string_to_regexp [multi_line \ "/* offset | size */ type = struct abc \{" \ -" public:" \ "/* 8 | 8 */ void *field1;" \ "/* 16: 0 | 4 */ unsigned int field2 : 1;" \ "/* XXX 7-bit hole */" \ @@ -421,7 +417,6 @@ with_test_prefix "with_hex_default" { gdb_test "ptype /o struct abc" \ [string_to_regexp [multi_line \ "/* offset | size */ type = struct abc \{" \ - " public:" \ "/* 0x0008 | 0x0008 */ void *field1;" \ "/* 0x0010: 0x0 | 0x0004 */ unsigned int field2 : 1;" \ "/* XXX 7-bit hole */" \ @@ -445,7 +440,6 @@ with_test_prefix "with_hex_default" { gdb_test "ptype /od struct abc" \ [string_to_regexp [multi_line \ "/* offset | size */ type = struct abc \{" \ - " public:" \ "/* 8 | 8 */ void *field1;" \ "/* 16: 0 | 4 */ unsigned int field2 : 1;" \ "/* XXX 7-bit hole */" \