From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7905) id B22953858285; Tue, 16 Jan 2024 17:54:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B22953858285 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1705427643; bh=g01tmbJA/or0AoP8wDTbRvg1IoCG/CdqPFf4waVTAPU=; h=From:To:Subject:Date:From; b=eD7t018XODOrJtfeUwPLzEkKJOfZPJl3i7yZC8HNdNEwzudXtO80kibwNN55hpLHO H8hXudfuD0eNU3pzffPIw/oeFlyLSdN+cpmodVH7+cP1BTRi4MmySReeDW9YJzxB19 sW0FAyEOv1QWYoSjACNekyxNHq19dc2BD71kumeY= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Arthur Cohen To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-7690] gccrs: expand: Change names and document behavior X-Act-Checkin: gcc X-Git-Author: Pierre-Emmanuel Patry X-Git-Refname: refs/heads/trunk X-Git-Oldrev: 13557769abc6f575fa9cd994849c20ccf60dda52 X-Git-Newrev: 1891acf2bdd0cdce74e53c7c90ddedae47742624 Message-Id: <20240116175403.B22953858285@sourceware.org> Date: Tue, 16 Jan 2024 17:54:03 +0000 (GMT) List-Id: https://gcc.gnu.org/g:1891acf2bdd0cdce74e53c7c90ddedae47742624 commit r14-7690-g1891acf2bdd0cdce74e53c7c90ddedae47742624 Author: Pierre-Emmanuel Patry Date: Wed Jun 21 15:56:26 2023 +0200 gccrs: expand: Change names and document behavior Change some argument name, as well as some documentation. gcc/rust/ChangeLog: * ast/rust-ast.cc (BlockExpr::normalize_tail_expr): Refactor code and warn about dangling reference. * expand/rust-expand-visitor.cc (expand_stmt_attribute): Document function and change argument names to make those clearer. Signed-off-by: Pierre-Emmanuel Patry Diff: --- gcc/rust/ast/rust-ast.cc | 4 +++- gcc/rust/expand/rust-expand-visitor.cc | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gcc/rust/ast/rust-ast.cc b/gcc/rust/ast/rust-ast.cc index 2eac09ba5d3..14ad3a05620 100644 --- a/gcc/rust/ast/rust-ast.cc +++ b/gcc/rust/ast/rust-ast.cc @@ -4228,8 +4228,10 @@ BlockExpr::normalize_tail_expr () if (!expr) { // HACK: try to turn the last statement into a tail expression - if (statements.size () && statements.back ()->is_expr ()) + if (!statements.empty () && statements.back ()->is_expr ()) { + // Watch out: This reference become invalid when the vector is + // modified. auto &stmt = static_cast (*statements.back ()); if (!stmt.is_semicolon_followed ()) diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc index 28ff3df3148..055f723fc75 100644 --- a/gcc/rust/expand/rust-expand-visitor.cc +++ b/gcc/rust/expand/rust-expand-visitor.cc @@ -149,12 +149,18 @@ expand_item_attribute (AST::Item &item, AST::SimplePath &name, return result; } +/* Helper function to expand a given attribute on a statement and collect back + * statements. + * T should be anything that can be used as a statement accepting outer + * attributes. + */ template static std::vector> -expand_stmt_attribute (T &item, AST::SimplePath &name, MacroExpander &expander) +expand_stmt_attribute (T &statement, AST::SimplePath &attribute, + MacroExpander &expander) { std::vector> result; - auto frag = expander.expand_attribute_proc_macro (item, name); + auto frag = expander.expand_attribute_proc_macro (statement, attribute); if (!frag.is_error ()) { for (auto &node : frag.get_nodes ())