From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1879) id 6E1C53853827; Fri, 21 Oct 2022 13:01:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6E1C53853827 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1666357263; bh=SBFovfLrFKoyu7k+SHMxjq8mYcmBbls2cqA3RIOUkQM=; h=From:To:Subject:Date:From; b=lbiEV9gHluppIEBKfAV+f6QQhIbPxmucrn9sgsF1oWA/CIarmSFX6D9SNWApzAOQk NO1YbIZRNhvL4YwzwJ5OgWaZ+XbXXafcq4vdhgiCS55bkFSl/9hduWPRBgzJXUdjt7 esrftpZ7/30UrAJvqEpZsydwxWoPQ7559Z6InPJo= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Simon Marchi To: gdb-cvs@sourceware.org Subject: [binutils-gdb] gdb: declare variables on first use in inherit_abstract_dies X-Act-Checkin: binutils-gdb X-Git-Author: Simon Marchi X-Git-Refname: refs/heads/master X-Git-Oldrev: 4b2e7a577c2f7311a8c381ff791d46e654c41fcc X-Git-Newrev: 75436c534bfd7f548a13b5f926c3bd234b23b8d0 Message-Id: <20221021130103.6E1C53853827@sourceware.org> Date: Fri, 21 Oct 2022 13:01:03 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D75436c534bfd= 7f548a13b5f926c3bd234b23b8d0 commit 75436c534bfd7f548a13b5f926c3bd234b23b8d0 Author: Simon Marchi Date: Fri Oct 21 08:58:21 2022 -0400 gdb: declare variables on first use in inherit_abstract_dies =20 Move variable declarations to where they are first use, plus some random style fixes. =20 Change-Id: Idf40d60f9034996fa6a234165cd989a721eb4148 Diff: --- gdb/dwarf2/read.c | 51 +++++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index b5efcb3cc09..89ba9122e91 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -11825,29 +11825,20 @@ queue_and_load_all_dwo_tus (dwarf2_cu *cu) static void inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu) { - struct die_info *child_die; - sect_offset *offsetp; - /* Parent of DIE - referenced by DW_AT_abstract_origin. */ - struct die_info *origin_die; - /* Iterator of the ORIGIN_DIE children. */ - struct die_info *origin_child_die; - struct attribute *attr; - struct dwarf2_cu *origin_cu; - struct pending **origin_previous_list_in_scope; - - attr =3D dwarf2_attr (die, DW_AT_abstract_origin, cu); - if (!attr) + attribute *attr =3D dwarf2_attr (die, DW_AT_abstract_origin, cu); + if (attr =3D=3D nullptr) return; =20 /* Note that following die references may follow to a die in a - different cu. */ + different CU. */ + dwarf2_cu *origin_cu =3D cu; =20 - origin_cu =3D cu; - origin_die =3D follow_die_ref (die, attr, &origin_cu); + /* Parent of DIE - referenced by DW_AT_abstract_origin. */ + die_info *origin_die =3D follow_die_ref (die, attr, &origin_cu); =20 /* We're inheriting ORIGIN's children into the scope we'd put DIE's symbols in. */ - origin_previous_list_in_scope =3D origin_cu->list_in_scope; + struct pending **origin_previous_list_in_scope =3D origin_cu->list_in_sc= ope; origin_cu->list_in_scope =3D cu->list_in_scope; =20 if (die->tag !=3D origin_die->tag @@ -11890,13 +11881,10 @@ inherit_abstract_dies (struct die_info *die, stru= ct dwarf2_cu *cu) =20 std::vector offsets; =20 - for (child_die =3D die->child; + for (die_info *child_die =3D die->child; child_die && child_die->tag; child_die =3D child_die->sibling) { - struct die_info *child_origin_die; - struct dwarf2_cu *child_origin_cu; - /* We are trying to process concrete instance entries: DW_TAG_call_site DIEs indeed have a DW_AT_abstract_origin tag, but it's not relevant to our analysis here. i.e. detecting DIEs that are @@ -11916,14 +11904,15 @@ inherit_abstract_dies (struct die_info *die, stru= ct dwarf2_cu *cu) DW_AT_abstract_origin, follow them all; there shouldn't be, but GCC versions at least through 4.4 generate this (GCC PR 40573). */ - child_origin_die =3D child_die; - child_origin_cu =3D cu; - while (1) + die_info *child_origin_die =3D child_die; + dwarf2_cu *child_origin_cu =3D cu; + while (true) { attr =3D dwarf2_attr (child_origin_die, DW_AT_abstract_origin, child_origin_cu); - if (attr =3D=3D NULL) + if (attr =3D=3D nullptr) break; + child_origin_die =3D follow_die_ref (child_origin_die, attr, &child_origin_cu); } @@ -11959,22 +11948,26 @@ inherit_abstract_dies (struct die_info *die, stru= ct dwarf2_cu *cu) if (are_isomorphic) corresponding_abstract_child =3D corresponding_abstract_child->sibling; } + std::sort (offsets.begin (), offsets.end ()); sect_offset *offsets_end =3D offsets.data () + offsets.size (); - for (offsetp =3D offsets.data () + 1; offsetp < offsets_end; offsetp++) + for (sect_offset *offsetp =3D offsets.data () + 1; + offsetp < offsets_end; + offsetp++) if (offsetp[-1] =3D=3D *offsetp) complaint (_("Multiple children of DIE %s refer " "to DIE %s as their abstract origin"), sect_offset_str (die->sect_off), sect_offset_str (*offsetp)); =20 - offsetp =3D offsets.data (); - origin_child_die =3D origin_die->child; - while (origin_child_die && origin_child_die->tag) + sect_offset *offsetp =3D offsets.data (); + die_info *origin_child_die =3D origin_die->child; + while (origin_child_die !=3D nullptr && origin_child_die->tag !=3D 0) { /* Is ORIGIN_CHILD_DIE referenced by any of the DIE children? */ while (offsetp < offsets_end && *offsetp < origin_child_die->sect_off) offsetp++; + if (offsetp >=3D offsets_end || *offsetp > origin_child_die->sect_off) { @@ -11985,8 +11978,10 @@ inherit_abstract_dies (struct die_info *die, struc= t dwarf2_cu *cu) if (!origin_child_die->in_process) process_die (origin_child_die, origin_cu); } + origin_child_die =3D origin_child_die->sibling; } + origin_cu->list_in_scope =3D origin_previous_list_in_scope; =20 if (cu !=3D origin_cu)