Rust-GCC / Rust-GCC/gccrs

Handle outer attributes properly for inline assembly

Open
#3,048 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
2.9k
Forks
231
Avg merge
19h 55m
Merged PRs (30d)
67

Description

The current scaffolding for the InlineAsm AST node defines the attribute std::vector<Attribute> outer_attrs in order to avoid being an abstract class from ExprWithoutBlock

It would be great to handle this attribute without involving this hacky way?

See https://github.com/Rust-GCC/gccrs/pull/2982#discussion_r1636734395

The path for the involving file is gccrs/gcc/rust/ast/rust-expr.h

The preview of the code is

class InlineAsm : public ExprWithoutBlock
{
private:
  location_t locus;
  // TODO: Not sure how outer_attrs plays with InlineAsm, I put it here in order
  // to override, very hacky.
  std::vector<Attribute> outer_attrs;

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in gccrs/gcc/rust/ast/rust-expr.h and read the InlineAsm and ExprWithoutBlock definitions, then review the discussion in PR 2982. Trace how outer_attrs is handled for these AST nodes and determine what the intended non-hacky design should preserve. Done means InlineAsm no longer needs the temporary attribute member while remaining valid in the AST hierarchy.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, rust
Domain
compilers
Issue type
Refactor
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.