From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id KSsyL1Za+Gk29REAWB0awg (envelope-from ) for ; Mon, 04 May 2026 04:35:34 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=lynQmsXf; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id BD2A51E093; Mon, 04 May 2026 04:35:34 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,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 E462F1E093 for ; Mon, 04 May 2026 04:35:33 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id EF2FE4BB24D2 for ; Mon, 4 May 2026 08:35:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EF2FE4BB24D2 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=lynQmsXf Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) by sourceware.org (Postfix) with ESMTPS id B601B4BAE7E2 for ; Mon, 4 May 2026 08:34:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B601B4BAE7E2 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B601B4BAE7E2 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777883700; cv=none; b=v/6zEwCjkQWu4zQalDf55NIwfO7XeUAo72yBbsR6Zlk4YQ+YPfs1rqhS7v/fIJj/GRYaxtUxHupnnDjj/MOxIQ4wN4+tAM8/zQJjWzeE0Jt0hB3sCM1RWVF4BmfLRHbbPCiKjSGQv8kkvGcFbCpFiBQ99WGbnLRd19YJ8wQkPhA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777883700; c=relaxed/simple; bh=4OM/+yZc3mxan8IP/lzQxh7+djyQ/cpD7dOWWxZQ2Jc=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=kxe+4tEH8Ht6eEXiADFG1UKIdV9aBEGlB+M6nCOId/y4wDi4L9bMDQrGKW8n3oDRhi0uUQa9whFQnxPMI//IGb/u3gCQm3upnuJ7lVSnEv8udwcmnxYOeae5jdD6KUZuGoKk9CZJ+ML4d0Q7QhimI+P2rW2ad77tRPY+iM9dFHg= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B601B4BAE7E2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1777883699; x=1809419699; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4OM/+yZc3mxan8IP/lzQxh7+djyQ/cpD7dOWWxZQ2Jc=; b=lynQmsXfEyw1TvP6kSrv0aX8/u0o75RJ7Z+TXsdLJEOLJhOlJLQFjTpx eIcMu14rFoO+PHRww1YDOv7FSlcFQzQd6Od5ZJFeKExah743wXRXC6GPU GzUBDiyQxrqeoxorsdmGkxLc01InFu63gEoycixkQ/NWdeWtSu/GAuqPq kf9gnhGEsC7zF+lWSd+0aC/aKtF6ZdC2XtmGBAesJO4rUEvNn4Fg671Jc 3PFvOi0MyEM900/CYtg5rVE6HGd4TBJ+mXR5LRUPdRMxrfzM179kKn0zy NLocTPfRlBVg7ZD6cZvDlmTD60GG1x3bvkdCW5jaGbBT+wRt9KVEQzsuS g==; X-CSE-ConnectionGUID: WUPVbm9/QRCEsUqYuBdQkQ== X-CSE-MsgGUID: HQkO1zYlQ9CXyTWC+lhqnw== X-IronPort-AV: E=McAfee;i="6800,10657,11775"; a="78600659" X-IronPort-AV: E=Sophos;i="6.23,215,1770624000"; d="scan'208";a="78600659" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2026 01:34:58 -0700 X-CSE-ConnectionGUID: t+Arnd9sSj2gFOuc9EUYQw== X-CSE-MsgGUID: ERx8DkjgRnSmB4LUE3+JpQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,215,1770624000"; d="scan'208";a="234435167" Received: from soc-5cg53737g3.clients.intel.com (HELO localhost) ([172.28.226.46]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2026 01:34:57 -0700 From: Abdul Basit Ijaz To: gdb-patches@sourceware.org Cc: abdul.b.ijaz@intel.com, tom@tromey.com Subject: [PATCH v2 1/1] gdb/dwarf: Use the function scope for DW_TAG_imported_declaration Date: Mon, 4 May 2026 10:34:40 +0200 Message-Id: <20260504083440.387223-2-abdul.b.ijaz@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260504083440.387223-1-abdul.b.ijaz@intel.com> References: <20260504083440.387223-1-abdul.b.ijaz@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 All Fortran imported variable aliases (`use module, alias => var`) were being added to "global scope", regardless of whether they appeared in: - Program/module scope (should be global) - Function scope (should be local) This caused conflicts when different functions had the same alias name pointing to different variables. DW_TAG_imported_declaration and DW_TAG_namespace cases are now handled separately. This patch modifies the case for DW_TAG_imported_ declaration in the function new_symbol () to use cu->list_in_scope instead of global symbols for all languages. This ensures that function-scoped aliases use the current scope rather than being forced into the global scope. Bug Scenario: subroutine sub1 use mod1, var_i_alias=>var_i ! alias points to mod1::var_i var_i_alias = 3 var_i = 4 end subroutine subroutine sub2 use mod2, var_i_alias=>var_i ! alias points to mod2::var_i var_i_alias = 23 var_i = 25 end subroutine Before: var_i_alias in sub2 incorrectly resolved to mod1::var_i (value 25) After: Each function's alias correctly resolves to its own imported variable (value 23) New test files verify the fix and include regression tests for global program-scope imports: - gdb/testsuite/gdb.fortran/module_declarations.exp - gdb/testsuite/gdb.fortran/module_declarations.f90 Before the change: (gdb) print var_i_alias $4 = 25 FAIL: gdb.fortran/module_declarations.exp: sub2_test: print var_i_alias After the change: (gdb) print var_i_alias $4 = 23 PASS: gdb.fortran/module_declarations.exp: sub2_test: print var_i_alias --- gdb/dwarf2/read.c | 10 +++ .../gdb.fortran/module_declarations.exp | 62 +++++++++++++++++++ .../gdb.fortran/module_declarations.f90 | 59 ++++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 gdb/testsuite/gdb.fortran/module_declarations.exp create mode 100644 gdb/testsuite/gdb.fortran/module_declarations.f90 diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index a1081da2317..efe96f6510d 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -15846,6 +15846,16 @@ new_symbol (struct die_info *die, struct dwarf2_cu *cu, struct symbol *sym, : cu->list_in_scope); break; case DW_TAG_imported_declaration: + sym->set_domain (TYPE_DOMAIN); + sym->set_loc_class_index (LOC_TYPEDEF); + /* Use current scope context rather than forcing global scope. This + ensures variable aliases are scoped correctly (function-level, + module-level, or program-level). */ + list_to_add + = ((cu->list_in_scope == &cu->get_builder ()->get_file_symbols ()) + ? &cu->get_builder ()->get_global_symbols () + : cu->list_in_scope); + break; case DW_TAG_namespace: sym->set_domain (TYPE_DOMAIN); sym->set_loc_class_index (LOC_TYPEDEF); diff --git a/gdb/testsuite/gdb.fortran/module_declarations.exp b/gdb/testsuite/gdb.fortran/module_declarations.exp new file mode 100644 index 00000000000..8953841c599 --- /dev/null +++ b/gdb/testsuite/gdb.fortran/module_declarations.exp @@ -0,0 +1,62 @@ +# Copyright 2026 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +load_lib "fortran.exp" + +require allow_fortran_tests + +standard_testfile .f90 + +if { [prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90}] } { + return +} + +if {![fortran_runto_main]} { + return +} + +# Test global alias at program scope +gdb_breakpoint [gdb_get_line_number "bp-main"] +gdb_continue_to_breakpoint "bp-main" ".*bp-main.*" + +with_test_prefix "global_test" { + gdb_test "print global_alias" " = 200" + gdb_test "print global_var_i_from_mod1" " = 300" +} + +gdb_breakpoint [gdb_get_line_number "bp-sub1"] +gdb_continue_to_breakpoint "bp-sub1" ".*bp-sub1.*" + +with_test_prefix "sub1_test" { + gdb_test "print var_i_alias" " = 3" + gdb_test "print var_i" " = 4" +} + +gdb_breakpoint [gdb_get_line_number "bp-sub2"] +gdb_continue_to_breakpoint "bp-sub2" ".*bp-sub2.*" + +with_test_prefix "sub2_test" { + gdb_test "print var_i_alias" " = 23" + gdb_test "print var_i" " = 25" +} + +# Test same-name variables shadowed within same function +gdb_breakpoint [gdb_get_line_number "bp-sub3"] +gdb_continue_to_breakpoint "bp-sub3" ".*bp-sub3.*" + +with_test_prefix "sub3_shadow_test" { + gdb_test "print var_i_from_mod1" " = 31" + gdb_test "print var_i_from_mod2" " = 32" +} diff --git a/gdb/testsuite/gdb.fortran/module_declarations.f90 b/gdb/testsuite/gdb.fortran/module_declarations.f90 new file mode 100644 index 00000000000..314e2405b34 --- /dev/null +++ b/gdb/testsuite/gdb.fortran/module_declarations.f90 @@ -0,0 +1,59 @@ +! Copyright 2026 Free Software Foundation, Inc. +! +! This program is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 3 of the License, or +! (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program. If not, see . + +module mod1 + implicit none + integer :: var_i = 1 + integer :: global_var = 100 +end module mod1 + +module mod2 + implicit none + integer :: var_i = 2 +end module mod2 + +subroutine sub1 + use mod1, var_i_alias=>var_i + use mod2 + implicit none + var_i_alias = 3 + var_i = 4 +end subroutine ! bp-sub1 + +subroutine sub2 + use mod1 + use mod2, var_i_alias=>var_i + implicit none + var_i_alias = 23 + var_i = 25 +end subroutine ! bp-sub2 + +subroutine sub3 + use mod1, var_i_from_mod1=>var_i + use mod2, var_i_from_mod2=>var_i + implicit none + var_i_from_mod1 = 31 + var_i_from_mod2 = 32 +end subroutine ! bp-sub3 + +program main + use mod1, global_alias=>global_var, global_var_i_from_mod1=>var_i + implicit none + global_alias = 200 + global_var_i_from_mod1 = 300 + call sub1 ! bp-main + call sub2 + call sub3 +end -- 2.34.1 Intel Deutschland GmbH Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany Tel: +49 89 991 430, www.intel.de Managing Directors: Harry Demas, Jeffrey Schneiderman, Yin Chong Sorrell Chairperson of the Supervisory Board: Nicole Lau Registered Seat: Munich Commercial Register: Amtsgericht Muenchen HRB 186928