From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id ybH4IzrNmGnGNAMAWB0awg (envelope-from ) for ; Fri, 20 Feb 2026 16:08:10 -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=PBBRzKv1; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 8A1041E08D; Fri, 20 Feb 2026 16:08:10 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id B6E731E08D for ; Fri, 20 Feb 2026 16:08:09 -0500 (EST) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id E081D4BAD149 for ; Fri, 20 Feb 2026 21:08:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E081D4BAD149 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=PBBRzKv1 Received: from mail-oa1-x32.google.com (mail-oa1-x32.google.com [IPv6:2001:4860:4864:20::32]) by sourceware.org (Postfix) with ESMTPS id 342BF4BA23EE for ; Fri, 20 Feb 2026 21:03:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 342BF4BA23EE 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 342BF4BA23EE Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2001:4860:4864:20::32 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1771621435; cv=none; b=e5a3dJVtqXleobCHq255ii70JlZVf2fZ3J0wVMMPKJvo8tWMriP3o5yOai4WVZGkB/d4dEZaJd0d4qE6RtdguE8ou/KKBPNVIJEIn9160CboI87S6y0O4EUAtW6GfNwZ4c/khQPhvlMAe9Y/d/v0Y8sMwWGQl2Cn2W6rL8Xc5/4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1771621435; c=relaxed/simple; bh=1YKYhIR/3JF6ALyDvWtJwK0r9/X7zsyLZSpqzQUZ20o=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=iqGltvjR7Vm09Y5aCDrceixSwjN1anM+WLb5siOoNIwfw+yPEq2qJHRt4GjRSSrT2I2FiU0GphuUwJ8hR13MUcto+JIVKjh7HxqHdID2sqg+dSV/nbd9AvfIHP1ievkpnM3oo0mgF8NahAnUZvSTnEkHralrY8ri7AcjhUHK9l8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 342BF4BA23EE Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-404254ffe8aso1594818fac.0 for ; Fri, 20 Feb 2026 13:03:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; t=1771621434; x=1772226234; 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=+8ojpV5aO9TPjg5QbqTm7vcG+obLURmWnqEEMJyagBU=; b=PBBRzKv1HFly7AO5P2DCtiSyGCAs/nbCcH2iHaoioBzp+1ApGVn6y4CeB95f2+qxOV oqsVhSWSG4BsqewYF4hCrmLgcEn3WcU/TtFcu6cFqolaYbOlGfffUQBjfH3NM52gKFGl HGGWDaZS02Eb3+AuWwGMewUICqWKPQSW+QDOXAwnC3esOdVaEDhSVZoN2W+iSs/kBRst j597X49WCf3H5h+mMnGYV//2yomRN5u6WKc9rYDpTzik/cBFORE02rnRWJUnhW6WldO8 t+K/Y0yVw1lrzGcgs9AQbyoQI0Es/PoLnuuS8GPuyJenNRS11Rt+QVp5Ue8MUkdAL7tG f5Bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771621434; x=1772226234; 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=+8ojpV5aO9TPjg5QbqTm7vcG+obLURmWnqEEMJyagBU=; b=HL58mLBP7hI0fnuvIsWbhmlcwR+s5JG7Gw3qc6fHFtmnuZc32NDys8kxNmYF3DTHA6 Yyr86GRQzqrO6OjH4LZYD5hWEj74e2zteaEjUWf6OPmYVeppcqbq044lYtB98Hc8VUE8 qZk0r8jVqpyAG3OztXrKuanuT44wLbJOzEVkePYRAW1yNSS5Rub+fC1Ni0SJkEkh4kWg zg8gi8araKO43JUvTys5l4ypCDcZxOvDQ26oqeFjlF5xAbQHR+IwKicjrCMYNkTopxDr DaZ+4ppnuaKY6SjwFPd2/gpoVTDraOBVyQXQypc246aY2hPiBtbVx47b1uEyC7oI0XFa XXBQ== X-Gm-Message-State: AOJu0Yz2qj3ndEMmZ7P68ihBqFTHqlGJ/ceMA50/JpTq1EOoBPpau8vp 5znxz+PFK8pPclCVFmPglh0lp3OCGSJz9h3sx2Rgsa7RLqhwk0jKGdNu/HmeFgv8MQ== X-Gm-Gg: AZuq6aIEJRdO85ywuf27uEfPMCxoHjJ7VJTZ7iRWuDVK8ErW94BaZshj9Eej4HlZGXj H1VjdMqnqNVu0iEzaUJ8yQWFf67TRJfPzF4lK5pkwzlNlqSsH3etjDRdcLiWndhBPadEMRmvLd1 dxvq8Hqgt+or4EnrFw3olUgmKohkQeFFF45AmUccDXHSYH34T5qRYYJpGJYolwdfhYRfm6AaI/H XFGOL7GgPv6UNBSs9bUzF9jeyTUVZaKMbF4GIswk7TDvb6HYxNEfZPOCHELBljQLWtQ5vWtjFg2 w08vwWE5dIORj6FdnueyvX1oKQk42SQdwcWg998JVa3Io9b9otsocM4O13q5nzOpY60YD7eIKRY 9PI0llEGCcyNdTmDyrPhM0pN94tSF/BGuiA7m39jxDKXZSd3JEO5CMK9NjnaEm3uPtDoEghcmYh 4prd0s5EwXpcZu2yWJ8HKIyCj9hpz7RjAcNoMS5cUEShi1pPxVe6UjN7PU X-Received: by 2002:a05:6871:3409:b0:404:2e44:18b6 with SMTP id 586e51a60fabf-4157ad830a6mr657633fac.16.1771621434465; Fri, 20 Feb 2026 13:03:54 -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.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 13:03:54 -0800 (PST) From: Tom Tromey Date: Fri, 20 Feb 2026 14:03:53 -0700 Subject: [PATCH 07/10] Return gdbpy_ref<> from frame_info_to_frame_object MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260220-python-safety-minor-v1-7-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 frame_info_to_frame_object to return a gdbpy_ref<>, using the type system to convey that a new reference is always returned. --- gdb/python/py-frame.c | 28 +++++++++++----------------- gdb/python/py-framefilter.c | 2 +- gdb/python/py-infevents.c | 2 +- gdb/python/python-internal.h | 2 +- 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c index 68c2628c297..c0defbdc7ef 100644 --- a/gdb/python/py-frame.c +++ b/gdb/python/py-frame.c @@ -360,7 +360,7 @@ frapy_function (PyObject *self, PyObject *args) /* Convert a frame_info struct to a Python Frame object. Sets a Python exception and returns NULL on error. */ -PyObject * +gdbpy_ref<> frame_info_to_frame_object (const frame_info_ptr &frame) { gdbpy_ref frame_obj (PyObject_New (frame_object, @@ -393,7 +393,7 @@ frame_info_to_frame_object (const frame_info_ptr &frame) return gdbpy_handle_gdb_exception (nullptr, except); } - return (PyObject *) frame_obj.release (); + return gdbpy_ref<> (frame_obj.release ()); } /* Implementation of gdb.Frame.older (self) -> gdb.Frame. @@ -404,7 +404,6 @@ static PyObject * frapy_older (PyObject *self, PyObject *args) { frame_info_ptr frame, prev = NULL; - PyObject *prev_obj = NULL; /* Initialize to appease gcc warning. */ try { @@ -417,15 +416,13 @@ frapy_older (PyObject *self, PyObject *args) return gdbpy_handle_gdb_exception (nullptr, except); } + gdbpy_ref<> prev_obj; if (prev) prev_obj = frame_info_to_frame_object (prev); else - { - Py_INCREF (Py_None); - prev_obj = Py_None; - } + prev_obj = gdbpy_ref<>::new_reference (Py_None); - return prev_obj; + return prev_obj.release (); } /* Implementation of gdb.Frame.newer (self) -> gdb.Frame. @@ -436,7 +433,6 @@ static PyObject * frapy_newer (PyObject *self, PyObject *args) { frame_info_ptr frame, next = NULL; - PyObject *next_obj = NULL; /* Initialize to appease gcc warning. */ try { @@ -449,15 +445,13 @@ frapy_newer (PyObject *self, PyObject *args) return gdbpy_handle_gdb_exception (nullptr, except); } + gdbpy_ref<> next_obj; if (next) next_obj = frame_info_to_frame_object (next); else - { - Py_INCREF (Py_None); - next_obj = Py_None; - } + next_obj = gdbpy_ref<>::new_reference (Py_None); - return next_obj; + return next_obj.release (); } /* Implementation of gdb.Frame.find_sal (self) -> gdb.Symtab_and_line. @@ -660,7 +654,7 @@ frapy_static_link (PyObject *self, PyObject *args) if (link == nullptr) Py_RETURN_NONE; - return frame_info_to_frame_object (link); + return frame_info_to_frame_object (link).release (); } /* Implementation of gdb.newest_frame () -> gdb.Frame. @@ -680,7 +674,7 @@ gdbpy_newest_frame (PyObject *self, PyObject *args) return gdbpy_handle_gdb_exception (nullptr, except); } - return frame_info_to_frame_object (frame); + return frame_info_to_frame_object (frame).release (); } /* Implementation of gdb.selected_frame () -> gdb.Frame. @@ -700,7 +694,7 @@ gdbpy_selected_frame (PyObject *self, PyObject *args) return gdbpy_handle_gdb_exception (nullptr, except); } - return frame_info_to_frame_object (frame); + return frame_info_to_frame_object (frame).release (); } /* Implementation of gdb.stop_reason_string (Integer) -> String. diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c index 7e54286abbc..26172d9f80e 100644 --- a/gdb/python/py-framefilter.c +++ b/gdb/python/py-framefilter.c @@ -1088,7 +1088,7 @@ static PyObject * bootstrap_python_frame_filters (const frame_info_ptr &frame, int frame_low, int frame_high) { - gdbpy_ref<> frame_obj (frame_info_to_frame_object (frame)); + gdbpy_ref<> frame_obj = frame_info_to_frame_object (frame); if (frame_obj == NULL) return NULL; diff --git a/gdb/python/py-infevents.c b/gdb/python/py-infevents.c index 58c29de130e..1b27987d039 100644 --- a/gdb/python/py-infevents.c +++ b/gdb/python/py-infevents.c @@ -68,7 +68,7 @@ create_register_changed_event_object (const frame_info_ptr &frame, if (event == NULL) return NULL; - gdbpy_ref<> frame_obj (frame_info_to_frame_object (frame)); + gdbpy_ref<> frame_obj = frame_info_to_frame_object (frame); if (frame_obj == NULL) return NULL; diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 6fa37cf85bd..0b816db196f 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -502,7 +502,7 @@ gdbpy_ref<> block_to_block_object (const struct block *block, struct objfile *objfile); gdbpy_ref<> value_to_value_object (struct value *v); gdbpy_ref<> type_to_type_object (struct type *); -PyObject *frame_info_to_frame_object (const frame_info_ptr &frame); +gdbpy_ref<> frame_info_to_frame_object (const frame_info_ptr &frame); PyObject *symtab_to_linetable_object (PyObject *symtab); gdbpy_ref<> pspace_to_pspace_object (struct program_space *); PyObject *pspy_get_printers (PyObject *, void *); -- 2.53.0