From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id qTAyO6bNmGnGNAMAWB0awg (envelope-from ) for ; Fri, 20 Feb 2026 16:09:59 -0500 Authentication-Results: simark.ca; dkim=pass (2048-bit key; secure) header.d=adacore.com header.i=@adacore.com header.a=rsa-sha256 header.s=google header.b=BaJVXxl0; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id ECA1E1E08D; Fri, 20 Feb 2026 16:09:58 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 06E9F1E08D for ; Fri, 20 Feb 2026 16:09:58 -0500 (EST) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id A048F4BAD14D for ; Fri, 20 Feb 2026 21:09:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A048F4BAD14D Authentication-Results: sourceware.org; dkim=pass (2048-bit key, secure) header.d=adacore.com header.i=@adacore.com header.a=rsa-sha256 header.s=google header.b=BaJVXxl0 Received: from mail-oa1-x36.google.com (mail-oa1-x36.google.com [IPv6:2001:4860:4864:20::36]) by sourceware.org (Postfix) with ESMTPS id 4380C4BAD157 for ; Fri, 20 Feb 2026 21:03:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4380C4BAD157 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine 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 4380C4BAD157 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2001:4860:4864:20::36 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1771621437; cv=none; b=Lj9k1mgbepE4XaRWfBf3UdLhbxUdi9quoiqCzq2weEJzbCN3qSjFnzWwHJfXk3UwLLpdIRhjiEyhgxdsIylCBBn6npGrx6ekrM9qNXRR0uZTC88olyxGclOhgtgG0nwf2yFr8hQ1P82GbaE4A96oB+IkqWe1mDv0cqNQGZatdXQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1771621437; c=relaxed/simple; bh=vb40Xnuqp7RaJ2ar8Fnxg4CfJBqfiwSegw80t2p9fmI=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=VLadP5VxWsoszBVi3zI5HQgMNIsaQPOkAnS7Uh4J5V3p+V035NXPL55IeiQBF+eVmH5dlFF0pjJouqPDVsibCawOiN2tmrfu356FR4Sl16qHNnPx764jOiTPnDlTXQo469c1vSY+O6PUmvrrZuLHqUEmN6TvCdkFRpEmyJ8YJwQ= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4380C4BAD157 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-40f095f1036so1803772fac.1 for ; Fri, 20 Feb 2026 13:03:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1771621436; x=1772226236; darn=sourceware.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=FHkrRIpX/xUKAzVIFpAs1qfYBVn/oN3cMZ2pu2qiPd8=; b=BaJVXxl0l28kR+pR+TARgk7wXnQYqxAhzjdR/Dy9Ri40K5nJTwTRDcDzgNmLwDygJd XOfKwYSZ/X/MxHc13KAeqcNli8Jiq1uk43NWuS/s9ZXOOCPV0LGMXKuIE6Lr31DVMIHs 7+cI2Gu1fIWU3yRhueZdfbnAMMza/fCfQ+hxfe51I54TeLjdCjH6lbjQkdvp9dYYabzs qWYGP9JzJ92Rz8uRmXXs+gOpzooij1AouWG8XQ9cZTpvLhSSs0JxomD3he/etG5GniyV C1+DdP+jzEMpt1Fa3ozK+L9Nn5F2GyT237wR7GosZ/buF3J9PLYA9Y0IDQs+1DOM5XQG f1Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771621436; x=1772226236; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=FHkrRIpX/xUKAzVIFpAs1qfYBVn/oN3cMZ2pu2qiPd8=; b=WxykelfW9tioJbJ7twB+iae+wWMpokLQcNXOzLLu5jDyB2Apl0UG07NqEZ3OB33Mj+ 6q8KiPKaUJrckKVc43HieW8zOuZdFPTWeanRr9PpffMvn54pn5jM3HyE95PHtYAi9qAk D1lh43DAsXDesEPQC/K1Ol6L4Vpm2ZHyYkbL8MhdbPfySXTxVCZ41x4BbUSFNI2LZLiq 4Y5oEiDqwwyJD+RKEskqThIVIOfaztME48YDoTvPWGWkziuBDqYn0vyCJtS9RU/fl1HI /a84w41bDC1Lst9eHrfFOSH69mmheAA+1kITcK+8d0viyGA3DzYOcLd7Nic/e1cLsC09 Ru+Q== X-Gm-Message-State: AOJu0YzPjokNUBjTEETi3kP5lG5/sY0VeFvE+RhwYnJ1B1Hgy+h6H10v iuWjGxLtl1Xb9HA5ZWw2zhZoYW4GpZMqLCzQHGBYVuT3rcG65XVGHNA3qQHvZx2r7Eom0L5Zl9e UxA8= X-Gm-Gg: AZuq6aJ7ZcuYMPbRIMZeD/+179Iu2rIXkHh4EdrpFmrDoDssmjkl58m4x242hGzi+YT +B9NSvfjUvHJvAdAn7ioPGfzgnMfIig+PNGSjsL7HhVPX54IRlQz0QNlS17nbBHpoOI8BM4/9Tk zDGeeZ+01FcWbCVEG/b+AylEV8XsAV7TP4cSjyD6faqNWHmnJsfJ+0NSzqyNSPdK2J40EafKjuk bqMXqTiBtZyxzZXe6JZgQHVEQyXSwZrz7C9Q5lbfiklSd4FNur3kvhd/MeXpYSfUy4WTt1efa00 XGLHIyrKtk9dcDm8mpzU0xECKFqhCB1TMxh6Bx3hznWVEISUqAvrCd235KxP3KtATcIJ+YoZVom 2wMaAu78KnYj0biA1n3oO/vK4aRRBvA2a0J09wgwXWxBRNKURTi5tkm6IJT+y55HKMDpXfEU2U+ 0mbgPobr7Mqkb9KFMmKOGW8x9Au9ISyeHT4Ky1PADMfWnxKvWxwSfcTTGu X-Received: by 2002:a05:6870:4195:b0:3e8:98e4:56d with SMTP id 586e51a60fabf-4157b16394bmr631284fac.41.1771621436424; Fri, 20 Feb 2026 13:03:56 -0800 (PST) Received: from [192.168.0.26] (97-122-122-234.hlrn.qwest.net. [97.122.122.234]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4157d2d7826sm561630fac.10.2026.02.20.13.03.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 13:03:56 -0800 (PST) From: Tom Tromey Date: Fri, 20 Feb 2026 14:03:56 -0700 Subject: [PATCH 10/10] Return gdbpy_ref<> from gdbpy_registry::lookup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260220-python-safety-minor-v1-10-4c4b12e445af@adacore.com> References: <20260220-python-safety-minor-v1-0-4c4b12e445af@adacore.com> In-Reply-To: <20260220-python-safety-minor-v1-0-4c4b12e445af@adacore.com> To: gdb-patches@sourceware.org Cc: Tom Tromey X-Mailer: b4 0.14.3 X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org This changes gdbpy_registry::lookup to return a gdbpy_ref<>, using the type system to convey that a new reference is always returned. --- gdb/python/py-symbol.c | 13 ++++++------- gdb/python/py-symtab.c | 8 ++++---- gdb/python/py-type.c | 16 ++++++++-------- gdb/python/python-internal.h | 7 +++---- 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/gdb/python/py-symbol.c b/gdb/python/py-symbol.c index 7b6164fb20d..e8ff2dfe28a 100644 --- a/gdb/python/py-symbol.c +++ b/gdb/python/py-symbol.c @@ -339,18 +339,17 @@ set_symbol (symbol_object *obj, struct symbol *symbol) gdbpy_ref<> symbol_to_symbol_object (struct symbol *sym) { - symbol_object *sym_obj; - /* Look if there's already a gdb.Symbol object for given SYMBOL and if so, return it. */ + gdbpy_ref<> result; if (sym->is_objfile_owned ()) - sym_obj = sympy_registry.lookup (sym->objfile (), sym); + result = sympy_registry.lookup (sym->objfile (), sym); else - sym_obj = sympy_registry.lookup (sym->arch (), sym); - if (sym_obj != nullptr) - return gdbpy_ref<> (sym_obj); + result = sympy_registry.lookup (sym->arch (), sym); + if (result != nullptr) + return result; - sym_obj = PyObject_New (symbol_object, &symbol_object_type); + symbol_object *sym_obj = PyObject_New (symbol_object, &symbol_object_type); if (sym_obj) set_symbol (sym_obj, sym); diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index ed5abac1372..27d6c4beba9 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -377,10 +377,10 @@ symtab_to_symtab_object (struct symtab *symtab) and if so, return it. */ if (symtab != nullptr) { - symtab_obj = stpy_registry.lookup (symtab->compunit ()->objfile (), - symtab); - if (symtab_obj != nullptr) - return gdbpy_ref<> (symtab_obj); + gdbpy_ref<> result + = stpy_registry.lookup (symtab->compunit ()->objfile (), symtab); + if (result != nullptr) + return result; } symtab_obj = PyObject_New (symtab_object, &symtab_object_type); diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index 8f8f6e326a8..b6807801f7e 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -1426,8 +1426,6 @@ typy_iterator_dealloc (PyObject *obj) gdbpy_ref<> type_to_type_object (struct type *type) { - type_object *type_obj; - try { /* Try not to let stub types leak out to Python. */ @@ -1445,18 +1443,20 @@ type_to_type_object (struct type *type) /* Look if there's already a gdb.Type object for given TYPE and if so, return it. */ + gdbpy_ref<> result; if (type->is_objfile_owned ()) - type_obj = typy_registry.lookup (type->objfile_owner (), type); + result = typy_registry.lookup (type->objfile_owner (), type); else - type_obj = typy_registry.lookup (type->arch_owner (), type); + result = typy_registry.lookup (type->arch_owner (), type); - if (type_obj == nullptr) + if (result == nullptr) { - type_obj = PyObject_New (type_object, &type_object_type); - if (type_obj) + type_object *type_obj = PyObject_New (type_object, &type_object_type); + if (type_obj != nullptr) set_type (type_obj, type); + result = gdbpy_ref<> (type_obj); } - return gdbpy_ref<> (type_obj); + return result; } struct type * diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 1f0964f24d3..fdd353ffbeb 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -1191,14 +1191,13 @@ class gdbpy_registry } /* Lookup pre-existing Python object for given VAL. Return such object - if found, otherwise return NULL. This method always returns new - reference. */ + if found, otherwise return NULL. */ template - obj_type *lookup (O *owner, val_type *val) const + gdbpy_ref<> lookup (O *owner, val_type *val) const { obj_type *obj = get_storage (owner)->lookup (val); Py_XINCREF (static_cast (obj)); - return obj; + return gdbpy_ref<> (obj); } private: -- 2.53.0