Skip to content

Parse validation is oblivious to macro calls #18680

Open
@Veykril

Description

@Veykril

Rust has two kings of parse errors:

  • Pre-expansion parse errors, error that occur while parsing when something unexpected crops up
  • Post-expansion parse errors (validation errors), parses that are rejected post macro expansion

The latter allows for stuff like unsafe mod foo {} to be accepted by attributes without issues, as long as they don't emit unsafe mod again. That is, unsafe mod is rejected in post expansion by validation. rustc does this by walking the fully expanded file tree with a validation pass. Our validation pass right now walks the unexpanded trees though which means we would (if we had a validation diagnostic for unsafe mod) diagnose the following:

#[cfg(False)]
unsafe mod m {}

where as rustc does not. The reason for this is mainl that rust-analyzer does not work on the fully expanded parse tree of a file, we keep the file parse and the macro parses separate so we need to figure something out here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsdiagnostics / error reportingA-macromacro expansionA-parserparser issuesC-bugCategory: bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions