From patchwork Fri Oct 27 17:36:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78623 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 DCF9E38618CE for ; Fri, 27 Oct 2023 17:37:22 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x12f.google.com (mail-il1-x12f.google.com [IPv6:2607:f8b0:4864:20::12f]) by sourceware.org (Postfix) with ESMTPS id 13A40385C6C4 for ; Fri, 27 Oct 2023 17:36:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 13A40385C6C4 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 13A40385C6C4 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::12f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428212; cv=none; b=J1Vn6NyWpWrnUs6oNheROjk9PyPKQkf51ZDd8CWHw01MFkfPsX5tRmFe//44yA2y93GkwyNlJOJem1TWLHUKJddivYhCBmoEyxMs3Xxu3KStPh5D/vjk8Ep672k76ugQw3ZF+C+c32Yupih5kb1PfJRAK0vgSLA87ZJf3C7IgkU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428212; c=relaxed/simple; bh=R8G0ZbImvk+AfKmDUYzW45YavMqgPvC48s+YGTQwjwU=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=Q1fI7uoOcZA/j3TGw9wz8GygCtb+xJTUtsiG8I1xwBgoixu9xEn8CJP1SJAu/oXYqG8ZBFGN4fTRZVkXOxnUsKf/OAbGVwbfyILrn7lp/yQ0z8twalq+yrduDLWFegN98D1NHJxbDMRhE+2854+XTsOD5BZ6nYlf8HoykB0kFBg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x12f.google.com with SMTP id e9e14a558f8ab-3575c10421aso6957115ab.3 for ; Fri, 27 Oct 2023 10:36:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1698428210; x=1699033010; darn=sourceware.org; h=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=pWHtG5xUW9rgsMRY4ihc82BP4Pmp6vFa/JsG3VVmHeo=; b=LlYEPL4SeaCL6ELTirpZxIza8tqQmEhW744bj1fvmQfqBAcjZWt6dQWI+AsxzU0m2R RhDOvGJ6vFrnashAB1jWSQM4h2Kbzii528cWFh7lpG+wMnrpUqI99u3NxPzfv+ob2jkV V4ZdUjZ2IukqODvSDm1ZV1pykCaYStbRfL3dFdsKT748GaYaNed3U4gstA0rAdMJPnvX r3Fnp4JbJux8CZ5Ae9qF6LqSkCtRNBeqR5xMHw7uih+8WFFTHPAKgGC/rnmVDfq1OllI S7BEkFz8fVN339A/F+yAx7Dwl++ETols6kmA94T39oK4Ns5FZlzpQ6E6KZ1k+Ij0PcV4 SwHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698428210; x=1699033010; h=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=pWHtG5xUW9rgsMRY4ihc82BP4Pmp6vFa/JsG3VVmHeo=; b=BQe1i3kxDN5DicGCXgEG7s+Ed2mtLUvwaViYhqBPwPZJd3WNwVx0B3CWPk0uC9belR pJksE1gfQo2av5a476oshyD6UvDra+5IXfKo4dazW2HIHKJyKmNRk4Zci1jpAxUQYWWR TpuAYtJmNW6PLQNOa/XtpWk4hMYL0UxaQ0HnPK22QwLbrYzXPtsYErL4gEnz6mU3wkkR 5c5hxbeBtyaTY1oQKrJQOOXIiDFnHg/IsPF0WlBItJ4aSqDVu78bGdGkNp2NsL/MaRne Ic8OGGO02RiTiHjhjjXfs8llo+wvaWCG+WtrZwRjM2tns1ubApS/zRph97wh0r77TXKe PP4w== X-Gm-Message-State: AOJu0YzUZMkjeat9H+/fNcQQSjyrFyVuZJLx55SfNhJwdZKXy/1WAFtD TVpyN65FTa3OiQ+yicxYofLn1syKWQ4BAFxKlcbxLg== X-Google-Smtp-Source: AGHT+IEB+lz/PHw5scl4ynp252R7suSG9xrgS9y/nr/YyN/ofJyIp7v3kluRFuyCdz+jNzMf6zM2EQ== X-Received: by 2002:a05:6e02:1c2c:b0:357:4268:b5a with SMTP id m12-20020a056e021c2c00b0035742680b5amr4138356ilh.26.1698428210280; Fri, 27 Oct 2023 10:36:50 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b00357ce043118sm591754ilo.79.2023.10.27.10.36.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:36:49 -0700 (PDT) From: Tom Tromey Date: Fri, 27 Oct 2023 11:36:41 -0600 Subject: [PATCH v2 1/9] Use .def file to stringify type codes MIME-Version: 1.0 Message-Id: <20231027-field-bits-v2-1-cbec64f2136a@adacore.com> References: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> In-Reply-To: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 X-Spam-Status: No, score=-11.3 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 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. --- gdb/gdbtypes.c | 98 ++++++++++------------------------------------------------ 1 file changed, 17 insertions(+), 81 deletions(-) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 7011fddd695..1de90eff7ee 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5099,6 +5099,22 @@ 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"; + } + return "UNKNOWN TYPE CODE"; +} + void recursive_dump_type (struct type *type, int spaces) { @@ -5136,87 +5152,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 Oct 27 17:36:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78621 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 84CF1386182A for ; Fri, 27 Oct 2023 17:37:12 +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 D6FC5385E019 for ; Fri, 27 Oct 2023 17:36:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D6FC5385E019 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 D6FC5385E019 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=1698428213; cv=none; b=EdATjxGjSa6qCp/If5h6ZZEBusGfsXQaBNUxc3Tuzu1Uy2ISU3+eevRHRjFDafCIcwTh2zJYAuVaRXizQS+YI1+HLOslJzxDSNkLKmASqvOZfBynS6Px1/H9JLwJBlg/GhsNXRGbj/kSpNmybIZswDkdTzcltaN1EL/aWsSl/kc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428213; c=relaxed/simple; bh=rX9ljhnHq2dmL45eW24WCW9v1J4SWo2L9e01aWe9Bp0=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=pxM3wOxEpP7dFdm9rjEH1ujV5mLvOe2J1Er5qNbKhsoPaNGwFBaXFA5d4s7KpCCQnXZiH1IMrLj9+7flW6bNP+X1q1XSaOmPwHKb1jHC8XUBK/DRjifB+tL7suqoy9EroO2WPRwf08bvrYB80vBX+nj31AKzwho6Zqd6tgA/P+Y= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-io1-xd29.google.com with SMTP id ca18e2360f4ac-7a94a3b0a49so64408039f.2 for ; Fri, 27 Oct 2023 10:36:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1698428211; x=1699033011; darn=sourceware.org; h=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=EWYT9QTCkMGkljxhVYHxM8htM4jZ6ngfvbtAkbw9R2s=; b=Mw2p7joUcxpd0mT8v8rsOSkOf5k7zYj1oJHqr8Hfh2GP8XKrb8BnBLgO4DpvaxGOMA t9m6lXrspmuqFDTH4lCMS0Fp8hkcmlgn45hRtFOwGaF3WcDW8vQYIlVS1902niAtSTs4 Zbgvz1qor6/lzYxUHPyCh6moAd9Wzq6BQ23quNSZhXeKXu6LquOpzXRcEeyf472PJfAn zug2LUeSBwdx57COlYcwzxXIkL5FY7VuKpAB1xa1POSQKeCzKK0YqLRwQeVvhLfMG0if h9RtXd+ZvrONxdD/MP1rt19Sut1JPnreuFXy/0v5FgqagOQpuFPKEZqjD0pFBiy1fuOu rD6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698428211; x=1699033011; h=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=EWYT9QTCkMGkljxhVYHxM8htM4jZ6ngfvbtAkbw9R2s=; b=dXJ8QBlRKXmG2vzxMelPtxbm1UBnARgg3trOJf8fBRL0NYT9qj0sPYo3Z5dnnpDPD2 JFD9nxSYLidxQvcjIJLS9u0oTHDRVt/AW/04FumbfsaT0lyYKnYgtkgyOva98OKMSRHZ /wXksMEbT3LMRxJZDVm6+E3CV519N4VDgwek9gIglGlC2ZZ8eiL6mPM6sZzsxlPxwxgs H0k1WuY7VofZs3yNUUAAdtNsGgcp1rqmk76ixmjpXNMtBmJD/CXVYrXx7UNxvDZNPXEG cG9C8Rnu3nRGKTemh/ckuNxKBfQeTptiM2xIjy4eW6tawyGkRQFP08lD2sh8YoXHK3vZ Scxg== X-Gm-Message-State: AOJu0YwKmAQwtxn/fRqtaK+KL2379xGzInxILWuqNRC+COUxBrPAZDNo broBKrQpWZkKvHwND3xaxRo+/rgo16GI63hjdXslzQ== X-Google-Smtp-Source: AGHT+IEfafMZCRrlhYN+tpkNrN00fEXBjgcHztCD822TQfLjequ0RWrrqsrQbnPK9qfjUU95cTHt3A== X-Received: by 2002:a05:6e02:2196:b0:352:6f88:9818 with SMTP id j22-20020a056e02219600b003526f889818mr4119115ila.11.1698428210984; Fri, 27 Oct 2023 10:36:50 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b00357ce043118sm591754ilo.79.2023.10.27.10.36.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:36:50 -0700 (PDT) From: Tom Tromey Date: Fri, 27 Oct 2023 11:36:42 -0600 Subject: [PATCH v2 2/9] Print field accessibility inline MIME-Version: 1.0 Message-Id: <20231027-field-bits-v2-2-cbec64f2136a@adacore.com> References: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> In-Reply-To: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 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, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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. --- gdb/gdbtypes.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 1de90eff7ee..203728a61d8 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5288,12 +5288,21 @@ 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 Oct 27 17:36:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78625 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 29B523861848 for ; Fri, 27 Oct 2023 17:37:39 +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 C4AEE385350F for ; Fri, 27 Oct 2023 17:36:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C4AEE385350F 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 C4AEE385350F 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=1698428216; cv=none; b=xo85c0TCCDNirunFuIX1jzQE47TQHPME55YscawBqLs+E+3F9towZYcr7XiD7RuxJ2arSbICMJu1gab0Bmx53caH4tavVqkUEpBNA4IHb15hWCujDWqaKvyrpCMMf/GwHD2j3Q18bZsdF4cYGEbwFaQb2KIdX3akw8lhL/g2xl8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428216; c=relaxed/simple; bh=cv7psfXeGP9y799ght8OLFTkiZDpE5VhdFX7USB/JNc=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=JjtOHUgSpDvN/9ynZphw1dkiPAZH4NmPco4NIG19bG9qXpEGMxwe3k+PMTJNhB4au7IlFU+/WM3nc5QQKIVMxtVf9WriXofH7dBWUK2Wv6gQFc7Fvu5OF2RhVcv2PRrCCSrM96Sq0piS6lv8g16NHrNMHyW5T3L3sqva6rgOUWg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-io1-xd32.google.com with SMTP id ca18e2360f4ac-7a67f447bf0so73756639f.2 for ; Fri, 27 Oct 2023 10:36:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1698428212; x=1699033012; darn=sourceware.org; h=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=bPWpsR+8EpadhLwau9tafL8tM1fatfYJVPBxsi1oBQ8=; b=FTJyc19rXLapTEt1i8KYy8xFpEFloFhwdsQSAKI3Y8AHToItG9hAS5KvsWaj9iTQal biseOqFH8sy5/YuIUUc4CfV0XMaAagKzpBSlAK4yUynVkm4yQCnvEXIU1vZ/jN0F6CAt eSZeOLr7BAVs7+0VS+9r/XtvI1xkx25terXXwwD+YYlXSHOGoJGd0qow9HTtvKytGlVp 3BnGe1EFBpH4brDMec6bncyUpQb7alEzpKHeJLGWKEjev/tqOLGQxr+ny7XKmg5KOOrG vLsnBRhrlHGtyhABQswh8eJ7ETPWbdZRF+fU3grJN/6TpWHCkY2qEepgZIKQiJUrLvSu dHjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698428212; x=1699033012; h=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=bPWpsR+8EpadhLwau9tafL8tM1fatfYJVPBxsi1oBQ8=; b=PJrDHZh2WPVM2W1LElSZTqKkCDf5ldnNEjyjQjE5BuYcTEAy+x75AEQPLX6nUc6dtY YUgBKkyDvw9dTSC7D4vGoaa3bsXBlAM0ozSZm5xR8X6vRVDcUKBthZ2+gOzg2r5HPtoy pyOv56TiDhkEE/P3Q6SPNYxrhbed7juwpq53XejbEpxCBmd0KwKjtTGlYZyrNWzLeirz +PlDJJXIOgeJQ8PXH7Zl8NL0WpY3iefn+xmIDK+DB9p1GTTDqP2vIjweuO3zqG83rTel o07RMfRWyBInIwKB/nbsoZPx50vJabjpj8IlMbdPSSMlLH/YXY1MTATFwmQqscDiRjuK s7OQ== X-Gm-Message-State: AOJu0YxnhbiS1Zb9aZElAeqqku4oIfTsUQOY3TkI64J63DNYotwAMJQl bFKIQcIqchA6eAOk6198H3sHMwdV5EGAF3h5xGnDfQ== X-Google-Smtp-Source: AGHT+IFto5hAun8YGyNImq4o8E/WEtf9XhoJ31VOHCXoKvkZINxDw/I16y/kCXsKyqB/gEv2Wj5PKw== X-Received: by 2002:a05:6e02:2162:b0:357:9e82:6cba with SMTP id s2-20020a056e02216200b003579e826cbamr4179228ilv.24.1698428211721; Fri, 27 Oct 2023 10:36:51 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b00357ce043118sm591754ilo.79.2023.10.27.10.36.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:36:51 -0700 (PDT) From: Tom Tromey Date: Fri, 27 Oct 2023 11:36:43 -0600 Subject: [PATCH v2 3/9] Remove byte vectors from cplus_struct_type MIME-Version: 1.0 Message-Id: <20231027-field-bits-v2-3-cbec64f2136a@adacore.com> References: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> In-Reply-To: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 X-Spam-Status: No, score=-11.0 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 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. --- 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 ea0b2328a3e..22aaec30ff1 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -670,8 +670,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. */ @@ -694,9 +692,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. */ @@ -11655,15 +11650,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; @@ -11757,8 +11760,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) @@ -12072,30 +12074,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 (); } @@ -12110,41 +12091,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 203728a61d8..68a210faca4 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..0a6bd425a5f 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. */ + accessibility get_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 Oct 27 17:36:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78626 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 041AF3871033 for ; Fri, 27 Oct 2023 17:37:41 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x12f.google.com (mail-il1-x12f.google.com [IPv6:2607:f8b0:4864:20::12f]) by sourceware.org (Postfix) with ESMTPS id 2BE8C3853515 for ; Fri, 27 Oct 2023 17:36:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2BE8C3853515 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 2BE8C3853515 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::12f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428214; cv=none; b=fItjl0lQ5fwPxE5L7Dso9NhNwDZ9KpXxO/gFDGWrDt/3dq1UQGjbvCyMuEW2GB1HNPvS19kYnORRksMR2GbXJQ+0WpbHLUABlXuHcYYUGO9Bw2GROZBgph/+lkXnUDu0cwuJuyk8IqczW5/sQApq4/itfIlqNIkFAsf5qUV4S18= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428214; c=relaxed/simple; bh=+a+RFQPpkcTcbixgsnhMd6Vn9yWeqpafp2nhf9nE+g4=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=FFuOZcy428Fb9UlU8n2yACof5Brucf8izxy2s6itWoETf47rJzEdI6pmDPDT8+8CU79t8sXZp5zMICJf8QcK9EJ4q1z6n2gwtW/V8Sjvvv0/oY+g52gWi9ydiCJlXlEPXWOxRlAL/p/lYy1fZK7IKHEsx/eIswPSXv5KV7N/DI8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x12f.google.com with SMTP id e9e14a558f8ab-357e783edbdso7049165ab.3 for ; Fri, 27 Oct 2023 10:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1698428212; x=1699033012; darn=sourceware.org; h=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=dcZRncqBOdmC56mA7NvB/FEdIFRU9NaCAI7uX7Fscbo=; b=OB2GsXPI6XeS82WvA7i1FyEJ661fz+V8WUfx7hRJhBMP+SNYJIqwif4M1tleBFARx+ U4aHEznnrU3bvRRvng781uPQG1hLNtGCtMrs2JA6WAI6zCoZv2QBzD5b9DNFL+BTa1c5 Q/aB0E7KlEaB5Y9uoTwHib6EqATmv+AI+4mtBBJOCRkFYO//prpNbvBss4xdzRCp+iwn PCsLppZ3COSkzRdvJ1MHydpMz3XbXmka5abxXuIfNCsqBNerlLKkwsBAHYIcOqR+fuXF xgy7yBCTVQmJoU2MahkLfVizLItGFpag/E+SOO+m0jO4HXAJSgAmr172J4QxV9QOljuJ wxMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698428212; x=1699033012; h=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=dcZRncqBOdmC56mA7NvB/FEdIFRU9NaCAI7uX7Fscbo=; b=poZx7HWaBFgGXxFHA+1j0PqmD6X/cpppLpvgFXq+JX4ky9wBFJsXt9/UKTYwl4SWxa gMPSFc5IYYnuhPx0vQYuFY8BjSEWsLow/2MQTFyMhkFHG0f5/cbEy3kQEUeeg/aMbdgC Jnin8tzuQ8N7yC1xYdkDlsmXpK5R0rGlkruJFx9DCzv74eiiKsXcuZFk4Zg1c0Gfw7F3 B9624W6ahsfODJrrCwUXw3rlZvhmlWobzt0vSEhDtvLzxeW8awXwLpVFYoP1piBK/PtM 8mF/YOoSxlhYJ9CNUmpldA+GnBSX1OoeW/2y7oCwKYtN7FO6dMFzkBVBpkpK9c+I+ykb jD4w== X-Gm-Message-State: AOJu0Yyr8xMDMXazEYKEvDnGCLbpgCaHg09xSFYnXKcM4lPI7h+kUvgc c7J2aw2zKsgw0ambgoDw4hLKMkuO5ur8kWPgy26dRg== X-Google-Smtp-Source: AGHT+IFGYhGyqoTQju8ahh1WRNXHRa1YfWBuw372vFWvzVmegrMvNDvGfaZVSpEtR1raci6m9LWZpA== X-Received: by 2002:a05:6e02:214a:b0:351:c52:5092 with SMTP id d10-20020a056e02214a00b003510c525092mr3864512ilv.3.1698428212505; Fri, 27 Oct 2023 10:36:52 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b00357ce043118sm591754ilo.79.2023.10.27.10.36.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:36:52 -0700 (PDT) From: Tom Tromey Date: Fri, 27 Oct 2023 11:36:44 -0600 Subject: [PATCH v2 4/9] Add field::is_public MIME-Version: 1.0 Message-Id: <20231027-field-bits-v2-4-cbec64f2136a@adacore.com> References: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> In-Reply-To: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 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, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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. --- gdb/gdbtypes.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 0a6bd425a5f..a4d2f3fa3e6 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -686,6 +686,10 @@ struct field accessibility get_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 Oct 27 17:36:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78622 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 B892A385F02B for ; Fri, 27 Oct 2023 17:37:20 +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 D1276385F02B for ; Fri, 27 Oct 2023 17:36:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D1276385F02B 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 D1276385F02B 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=1698428215; cv=none; b=Lgi9LY4ll72vvwnsI7FqyyYtXJZmT0FIWXXygWBCE+S67aynGpGs80yesv6AhM0yqEoqw8CDAnGrmH6OBROxtEzuJRAVHf6uFSrTp1s5gfT+dpeuHmbS+tx0zPNreYf3wlEJ6QQiviPgW99YLGq8459Iw2XBNEIVn7hdp1IpY9g= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428215; c=relaxed/simple; bh=T+ovshzyjSzS1Gw7eDupRq0xuFA7K8Npwf22LG8yd7k=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=D3AXI9qRG+x6nOCOS2YyvYy8QaNwWs0g5PY9OPmJm2vQIJLq4amMNWA2qg/IGx2ZhmDZp39CgS+/JpngAkQdsX5MjOo+tvjH0UraJF4F+Z3/P5+Rgddip8Wmhv2Z7M4PS3E5hdBDN7ECe6OU9f1bvOP+kg7//f4wRXuPLk+EIvQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x12d.google.com with SMTP id e9e14a558f8ab-357ccaf982eso7130955ab.0 for ; Fri, 27 Oct 2023 10:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1698428213; x=1699033013; darn=sourceware.org; h=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=klOSJRsq8XgXkDsR8S/6lvSqoyJ4+7BZHFdzMlXxb0w=; b=Wm1Ue+L8VLhu9rMD+YvyROadAD0W/5+BVyyuMzETzSeS70MIhNSDAFZW6nzYEpjsrL ioTkBTvnE63T8o9va1xJra6RvGpr43CoxU97VEBm25uVY+mEkbrz9B8A5UiSFGohYs7c vndRlfcRNCkkzoIEHs9Wsui0Qk2IjK/MyqvvfTGeDbJ4LfhPUby4huRLb16ZS/fYqVD+ D+oF6lNOe+XMR+jSC+3o7NSPHgBE9JIGysvB9R5o/6mvYjKiAGGns5CdOiQIX1K5Vs8z sc8/Jkf3YNEh63PHPygvNCGbVQ/Zz6evs+00fWVrdiEz7g2OYEbhVLhA9TCFIikW7HVD ocYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698428213; x=1699033013; h=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=klOSJRsq8XgXkDsR8S/6lvSqoyJ4+7BZHFdzMlXxb0w=; b=Qq7E8iFjSUOm/w3bO0sbUv6WHVdxtVRDIIlc0ZG8B3ArAoRR70vUEgLdSzWhVa1J0D AC8UWCpCfASoAv1V4MjxpbeCw4Zlh7ixyODokf3aqFtnOQuXO6gu2XCGaxnKmnfrJemq dg+N3l17xbXlkcNHSTJt6FCvDZ95YysmkY1sNlymLtxEHc+i3HfxwfDUYPwRhj/wOaQj UrbmgEF+1GSDr/IXRbZCe2Bi/u/yJVtdL+yoVuWtlbW41tU//m9cwJmL1dnCPzeJaKv9 rAtYVJHBYLxQeltaK3ppoIkgUnZFLRKYgV6PeTkP8pqAZOdeKtlfyuWKT/ZInXPvkv5P o2nA== X-Gm-Message-State: AOJu0Yz8i7+g8/d25dkXbAIc/h9zH0P9DzfkBduUxHiCc+6dHS/xxKCl GqRQpfeOQ7ZoFqpmSLIQM0Hr+NOqTkQCZSTcKIl94A== X-Google-Smtp-Source: AGHT+IGe43XnQt0PU/uLzzDzW2AvavTMbBPQ4t1dxai3n0vrq2z1wZEu2QupF9QrJNatZIKDJbsBuQ== X-Received: by 2002:a05:6e02:1c0c:b0:34f:739d:9bec with SMTP id l12-20020a056e021c0c00b0034f739d9becmr4124097ilh.31.1698428213121; Fri, 27 Oct 2023 10:36:53 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b00357ce043118sm591754ilo.79.2023.10.27.10.36.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:36:52 -0700 (PDT) From: Tom Tromey Date: Fri, 27 Oct 2023 11:36:45 -0600 Subject: [PATCH v2 5/9] Remove some QUIT calls from need_access_label_p MIME-Version: 1.0 Message-Id: <20231027-field-bits-v2-5-cbec64f2136a@adacore.com> References: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> In-Reply-To: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 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, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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. --- 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 Oct 27 17:36:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78627 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 9FAAD38618FC for ; Fri, 27 Oct 2023 17:37:49 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x136.google.com (mail-il1-x136.google.com [IPv6:2607:f8b0:4864:20::136]) by sourceware.org (Postfix) with ESMTPS id A5D22386074C for ; Fri, 27 Oct 2023 17:36:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A5D22386074C 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 A5D22386074C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::136 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428216; cv=none; b=f76NXPYSWCokhl3iXM7RdocYiIlZXTET9Ag36G6GmDkXg3yK+dQCUXW9tEbUWwaWKGTAevCyXMEd8PhZ5rPBhS+1/xVmPrGeTJ3fbX1tCl2pu+Hf4iE2lHBHXkatYXcNikSOXZRHTxcpU3Adg69ArwuVKFsbnqzeY6sXMZLpUlw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428216; c=relaxed/simple; bh=0NSdml0qc+LbAK3Lc3swEQpuqQbxRCQ84LW6otnLQ8Q=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=FMvVC1simPcQHH9Hq8KowU1dkfdALmJVsAj20R6Bf7rEvbh7KkrXrkIENQKr1arT4DAAdpPdImgM7YLWPlZehKaxAc+N+30zeUdbYm98d9MC3XCoMfKQbMIvrSheGEnarbXDI9GAph/cp5lIvC9uN1XuFiQ7YvPb3YGfND2i2zw= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x136.google.com with SMTP id e9e14a558f8ab-357f59f76e6so6917175ab.0 for ; Fri, 27 Oct 2023 10:36:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1698428214; x=1699033014; darn=sourceware.org; h=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=QtX/v+XCDTJ/YylZ9Aw3Ekfy6NknKuTqplhjgh28Hq8=; b=KgsF7qHZ9nba2F16v7BbRbW5htcpOKz61ePMX4WaqrTBFdgph+eo2hDaxieG+B2vHK p26spWjUSJtixlBrhzQGNgD6XVkqEdsh3y62nst69vOd/25JthiQrYKcTJnyTs6TD7LT lnGra4Esp/JVXZ0Nmnb+ghLJHNlyPz19mbXWBuSpmKLM/pv4Ouj04OtEMhF0jP6NtlRk YNbiYobDkVsbWDKIukwRh7OfATuT4Ea/e5a288pEAzdgAyxET9oWHoQHszD3UlUKmDxC wjwPq8B3bcKA6N1LOZpD03lCurjbkvXdaKNaCnLmtHhsgpgIoLZwsh6HSi2CNZb97Uyl wx+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698428214; x=1699033014; h=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=QtX/v+XCDTJ/YylZ9Aw3Ekfy6NknKuTqplhjgh28Hq8=; b=qVAmc8Wjzrf52xqd8T+34Oyp7tza67AzbDGuOX9hAZRauneWwN2MfSd+vdf2TRLiCH LHpvH4a91f6I9TA7DpQzKZmNYrq2/dnQYomDWsNOMQ4E8Ev20jh/WGI3/5GXgR+qDynn +Hb5d8bUygHDaz3Vwd4LfcwvuzXmuzbkWwqr5kpeLyjVS5ec4lCXl4dZrYvdbERyt4Du E83O0GMvHIuCpUo+8mslnQ4LI+nF5Zg6vjLvsbxm6AksIzHsB5/FbBedAFEusfdBp0UB bqzh4Tbp1Csu8ZvF8PRluEHFC21pVI9hWTCejjG0BIIPRH1SLbdooh1+iQZhuZuab4XW OCrw== X-Gm-Message-State: AOJu0YzlJTFxIv8l+EI10BaEZLmJYVVTZtCizY5KH0ncGzLajcJ6S5uL j5OYMC+AoHLCvF9SddU0eOc6YqrMnpxjYgRZgXADLQ== X-Google-Smtp-Source: AGHT+IF+bHCcKX+LZm6yjexuQYCt+00B4fdeOnZNw+ODfWv+pq0uD2b9ho0XCSPS+6ejfnSWNaCozA== X-Received: by 2002:a92:cda5:0:b0:357:f41c:8bf6 with SMTP id g5-20020a92cda5000000b00357f41c8bf6mr4655538ild.17.1698428213781; Fri, 27 Oct 2023 10:36:53 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b00357ce043118sm591754ilo.79.2023.10.27.10.36.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:36:53 -0700 (PDT) From: Tom Tromey Date: Fri, 27 Oct 2023 11:36:46 -0600 Subject: [PATCH v2 6/9] Remove some type field accessor macros MIME-Version: 1.0 Message-Id: <20231027-field-bits-v2-6-cbec64f2136a@adacore.com> References: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> In-Reply-To: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 X-Spam-Status: No, score=-11.5 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 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. --- 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..f3bc0731c99 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).get_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 68a210faca4..10fea9f74fa 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5228,31 +5228,32 @@ 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 a4d2f3fa3e6..ec27ca3b47a 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 Oct 27 17:36:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78624 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 0A10C3864825 for ; Fri, 27 Oct 2023 17:37:27 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x136.google.com (mail-il1-x136.google.com [IPv6:2607:f8b0:4864:20::136]) by sourceware.org (Postfix) with ESMTPS id 3830B3852766 for ; Fri, 27 Oct 2023 17:36:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3830B3852766 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 3830B3852766 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::136 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428216; cv=none; b=juYrDm4bsbExyvgPuR0TgIVCJ/1mdmECH8witQpr6ddl2bXJdQK/md/K0L6ExQx9jiQdYYA7LV02ESDLbZ8Oqm2aBblM/gUACkFzK+E78i9HLtodRC2ttDZsGbzysVTlBq7a7MjdQNydZVg7Angr047ZBUeyPjEfueOC4MJkyJ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428216; c=relaxed/simple; bh=QtY1GLPLNYaN+QGOqM4Dezl8XCZ3sLWk8NQ3trhGUEk=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=NWrm1lofIN5XWI7VpmvbsWo7TDSYYDlTBIIgwKyasxMe1I6V7Sbfth79c8BRbFtmb4RP2Tj/d5zEc3zCOMQWng9iQA9uJlRbHUyq1Za8hDuJCDG8zkdT+UfASQkkXro7XLWDo8j4VPpaj2ZAR7oXMvpxwFu4QLle05MwJs5RriU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x136.google.com with SMTP id e9e14a558f8ab-3574297c79eso7002075ab.1 for ; Fri, 27 Oct 2023 10:36:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1698428214; x=1699033014; darn=sourceware.org; h=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=9xf9bMhutbHUwXWkAp+kRTq0aVhLtkb78JersnptjsM=; b=OT/cIoW6RD6WVWFn4sSYSMox8WDwS70nGQIN+MlPZHZmxY/V9ti/9BUSpJ8lqHOJzH AlMXpuMbtsfsSeZLTlvFXxbaLm6yvmXL6J3dLJeFwbaz8hkj/d95E2rdvkwjZtBBUAnu JW3MnmZvA0BBvICkQtrHm3PSReKb/NX03uMo5lRP/CxTku16GqZL65jEnVoJt5RXkgiM pWALxOCkB+mmZTReza8x2kazbtHgJCyY97+vwnPnIR8iCB2q3H5B+GtHOTFJ3iIgOq1j ttMkbyQATpK/aB1IHkAOd7+yCQ2sDy2KVyBLCTPjAiTcqpID57gmEE3J1n1Ww8HVIqXa lBjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698428214; x=1699033014; h=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=9xf9bMhutbHUwXWkAp+kRTq0aVhLtkb78JersnptjsM=; b=adxhAeP731hYAioDvlQ5vGUo5Rsh3Rtumv/AkhjwKcHAx2LltAh6Wd6nBBIXBi02Ky f2Jrn+smGGQNcAqVQPdm4QR0ZuQYtM/JHFfZBn6OKYxVWqx7K13cSAdrW5Pun3I/Zclk IXO1TmnTZ/isvqdKD17tVCJbmC2hpsPo1vKYDryVQxUADzPDHlnGOm+njMFdptBJb1r9 Qf7vGqvlT0Ml4c0M98Uvgj3MoPtpNi0t7J4gcdPiM3DhqGJbeSTS3pr5SnKsF6nWfZ0l t001Behp9kzDjryiiy8t02EyoX2spfPZ1qemOcqvt2J2+bK2rW09k1o/C68wIjZBPXR3 OcDQ== X-Gm-Message-State: AOJu0Yz8WvrhmSZfp+MkILPB7M6+hJiVloM4ela1JrPHVr3d0IzwkmAy zN79CP64i5tlT94NwPqlpN8araR8RNjY19NC/avXjw== X-Google-Smtp-Source: AGHT+IHeQrC5nN6tVV7xqh28WRAqujWZ6jqdnWuur4NYUnSlv+qOSl1SQHO3jAkte20EBPI/a4496g== X-Received: by 2002:a92:c548:0:b0:34a:be3f:9ee6 with SMTP id a8-20020a92c548000000b0034abe3f9ee6mr4966044ilj.12.1698428214493; Fri, 27 Oct 2023 10:36:54 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b00357ce043118sm591754ilo.79.2023.10.27.10.36.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:36:54 -0700 (PDT) From: Tom Tromey Date: Fri, 27 Oct 2023 11:36:47 -0600 Subject: [PATCH v2 7/9] Remove char-based bitfield macros MIME-Version: 1.0 Message-Id: <20231027-field-bits-v2-7-cbec64f2136a@adacore.com> References: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> In-Reply-To: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 X-Spam-Status: No, score=-11.5 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 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. --- gdb/gdbtypes.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index ec27ca3b47a..cfa378f77a1 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 Oct 27 17:36:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78628 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 303723861927 for ; Fri, 27 Oct 2023 17:37:50 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x133.google.com (mail-il1-x133.google.com [IPv6:2607:f8b0:4864:20::133]) by sourceware.org (Postfix) with ESMTPS id 5A4E53861808 for ; Fri, 27 Oct 2023 17:36:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5A4E53861808 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 5A4E53861808 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::133 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428217; cv=none; b=f9r0UL7+dhWg7K8CIs2BcK6bNmmzBda291InAouyAJpaVkJPs9ytjzy/9J1MFk838xxvLBIeTmISPefrpPBXju4qfZm9tUc6kfok7ZijiEoVmVQSqYd6A7QETTgBYWjnoPrPhcMhzjt6/Pq6IUBcMumAn1cBbPNxmpBP3EbFi4o= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428217; c=relaxed/simple; bh=39EjaVCT7O4dlOacndIDldpYrEmkw0TeuJuLNZGlT70=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=G/0g7MUxm+nO/3GOqpr2y54XrL6XCKCjm3ErmxwwV/DyD4td6RVzuGobpm3GHgwtfJs3BgwnzM0QmOiqL1sabzybKKH3Mg3CSmuNa2AsGm16H8G7tS2kux3yhHihsmlS5UbdFpEsg/Jkav6ez+j3ro9JEsa7rYfj3n5iunpn2qY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x133.google.com with SMTP id e9e14a558f8ab-3573e6dd79bso6864025ab.2 for ; Fri, 27 Oct 2023 10:36:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1698428215; x=1699033015; darn=sourceware.org; h=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=3m/ZAMouO76b5meov8Elh8CkF7vw4/KJFJXc/tWCqNY=; b=PI0e47lWESwdKxJbkmP/zoxQx4IdCI8X1PrptFW5oSYdh3MZmNU0UaKvGzgmFT0apt Hy65b1xr23+xNGPIf1fgwjwuylqkUMfFwGlvYitrs9eLFChLmjeOp1MQxsK5zBu3BYXJ J2WqlpeKv2vh9dIDnFI6JIIjsT1u/n0mPtOhNYG98sW2ftmHa5L2peNbiDc+vVlANK7x 1AfSptI/ErrFWfDLYNGxvi/zX/vAJIeHKyfN8+z7siYUzM2/1GOMYIPVz79jSJeGeQxH mZ+vrOoLzP8Hc+Fn3v7gnTSeO61mUSc8elda/Zh1aX1sxfYZY1IK0JlSl6eClKdLoWHw Y9gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698428215; x=1699033015; h=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=3m/ZAMouO76b5meov8Elh8CkF7vw4/KJFJXc/tWCqNY=; b=Q7kOB695fGIf92ZMNBLRN3asVa507pOxeroMLuJAcxLCLWfk/TWyGO0hsxL0DHpKQM Sq5h/pVk3X5QeWRdJbHVCJUJ7a2Hhqbdx8/ZbeGwsXpjKWEo44RwFgr6Q1qzyGxBJsWG LcCdooOsCubQnyREzDvduVjifoZRYYspslXkkk3zjho4VYQBvd64kNiBfg4JbbAhRgg2 13//mTxFtpytW6StJ8MmSVr2HcCG62pO8wzBbnpfEADr6A7th6vM6Fuc/JsyXVtZVBrY Jf1TxbK2KnLYRc4e6FKZYHTTK/8YiSrhCoVlvmk21iXhr4v2OWqQru9Usl7bE/yASuyG aluQ== X-Gm-Message-State: AOJu0Yy/C+Ohq8hDfdLDLB/O5GJpQM0tg50l8JKh0FHL6KBIoIBY/Ovp IzlR6+XnRcoME4AStrbP34/sqkWdmbUKv4QMV1bhAw== X-Google-Smtp-Source: AGHT+IGk5rhyEfmj4oRctP5KyVPKZjRaUc62fsxZ4AzOsJqhsRacNmPusfI4Dpc7t05XdbOCZ8oX1Q== X-Received: by 2002:a05:6e02:20c6:b0:357:6170:90f3 with SMTP id 6-20020a056e0220c600b00357617090f3mr3691835ilq.30.1698428215478; Fri, 27 Oct 2023 10:36:55 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b00357ce043118sm591754ilo.79.2023.10.27.10.36.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:36:54 -0700 (PDT) From: Tom Tromey Date: Fri, 27 Oct 2023 11:36:48 -0600 Subject: [PATCH v2 8/9] Use enum accessibility in types and member functions MIME-Version: 1.0 Message-Id: <20231027-field-bits-v2-8-cbec64f2136a@adacore.com> References: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> In-Reply-To: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 X-Spam-Status: No, score=-11.5 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 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. --- 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 22aaec30ff1..15acec68788 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -11855,10 +11855,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; } @@ -12217,10 +12217,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 cfa378f77a1..3c7c420f501 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 Oct 27 17:36:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 78629 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 F045B386074C for ; Fri, 27 Oct 2023 17:38:04 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-il1-x12f.google.com (mail-il1-x12f.google.com [IPv6:2607:f8b0:4864:20::12f]) by sourceware.org (Postfix) with ESMTPS id DDDA53850867 for ; Fri, 27 Oct 2023 17:36:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DDDA53850867 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 DDDA53850867 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::12f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428218; cv=none; b=GFUSzRJlA5v5a4sspISFG5psrlS2BT+kpKLyTh6/wJzSCPY8BlPo0hf0tIyyi2QmkP8Wn9TkTc8p9Y5DYFKKwH4P7W2pZI4jr35k+8AWb86tcQbamXVsjzBmcR2UJVZflBkW010B1n0dkYg5aGkNQYPcieWvT+IYpfJ4fQLsewg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698428218; c=relaxed/simple; bh=RYbPgwSGCYItxSbGztsQdRJxFB8KfoV1zePdzPoqRGM=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=NvGXwhqRD5dYPUMlyWYL1kKmuKlFCXBqc/HZd2aV1xRGxjsxepbMfZA18N6l6Rff7hZgOhqKozskl6bfnvXTsl/9wQxXUQyF/B1Xfn3b9uc7z0ClxYqniGDcPxZiqzUDSPrnCozSpcHvKva6i3XHCQlPj1uqYICMYY89Q2QJXhU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x12f.google.com with SMTP id e9e14a558f8ab-3576e74ae9dso6537765ab.3 for ; Fri, 27 Oct 2023 10:36:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1698428216; x=1699033016; darn=sourceware.org; h=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=Caf6o2p7h9ASnFpj5zBUUeIOvCXCvqdRjjkO9ddr1AY=; b=Bz3kHdJpnAAnnbzQjNZYJgil1febwiogxQrAcEL5MQTF+9CywspM4eSrqDJCAy+OVA mv4LFt9JAy/mhQMh+KN2Yjir8Sxsr4RuKAQkR3T5nsqxff8K93YvGGeKNqUhvdXwHHR0 ZQhU805qJg4BfQYpz6PY4JAKp+iF9bkoYQLK3qaXiChVqqoBgfQ/WTgpDOiNwa2qhDRA zpwAACcSFN7ybjOOifImrqHv50fDWBo2wX7DUeMpe+D9nnTpDPxW6I6e59Qqc1Kxd72+ IIzdK3zIhmGLjDsdEYt7gjEHh3l3jhmos4OFU8Dlz1Mb9DhrAfb8WcFIBQ0Wj6u5l+Tx TLMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698428216; x=1699033016; h=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=Caf6o2p7h9ASnFpj5zBUUeIOvCXCvqdRjjkO9ddr1AY=; b=Q5eitMuPAcRZkU3VRqzwox8gWAAu/hccvLPQKI9INSd6M5CpTvDiVX0gzWNKIOXVix kK9VEBPEJ/g0xUlKNXvRC/AVEjRJe3mqSetaR/kfn3Vi4ioAzQq6frH1iFro60BTxE1d 6Fj5tqTGL72eWzGSfgYHQtQOF6Q1/Lgku2jgQUnDI211lfeMcmFKgWpBsGa1zAJkoOuU TYZ5B020QzMOpInTz4wF5U1G48Q3PRAtNdBBe59+2V/gnYrzEq725TFY4vp7caHWXqKZ kVWfSMF8rPuRPs8Lr/F8VDn7PMr5Vsv+U5cARIuq9L9I3AMCnNh+JgfnQlIgHcir/Q+G WpVA== X-Gm-Message-State: AOJu0Yy5k9k67ghUnxL0EnEzFlSJmsUY+z803n33a1/GgNOJFpLG8V0+ zjNZEdlCaNib91GRRxFpsFErS4ydf8t34yYK2uFHlw== X-Google-Smtp-Source: AGHT+IEQ3gHQPOTCqmclH60c/n/gt2/McQssM/hBXdeY3y0Fd2Wr4lNyJXVa6bX5+VZhU3KVT2QvNA== X-Received: by 2002:a92:c548:0:b0:358:ffc:e7b4 with SMTP id a8-20020a92c548000000b003580ffce7b4mr4742884ilj.16.1698428216184; Fri, 27 Oct 2023 10:36:56 -0700 (PDT) Received: from localhost.localdomain (97-122-77-73.hlrn.qwest.net. [97.122.77.73]) by smtp.gmail.com with ESMTPSA id r4-20020a92ce84000000b00357ce043118sm591754ilo.79.2023.10.27.10.36.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:36:55 -0700 (PDT) From: Tom Tromey Date: Fri, 27 Oct 2023 11:36:49 -0600 Subject: [PATCH v2 9/9] Simplify C++ type-printing MIME-Version: 1.0 Message-Id: <20231027-field-bits-v2-9-cbec64f2136a@adacore.com> References: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> In-Reply-To: <20231027-field-bits-v2-0-cbec64f2136a@adacore.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.3 X-Spam-Status: No, score=-11.5 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 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. --- 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..40f69481f07 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).get_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 */" \