Skip to content

An unexpected expanded result from procedural macro #125138

Open

Description

I tried this code to check the expanded HIR by flag -Z unpretty=hir:

// file proc_macro
extern crate proc_macro;

use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, Expr};

#[proc_macro]
pub fn mdriver(input: TokenStream) -> TokenStream {
    let expr = parse_macro_input!(input as Expr);

    let expanded = quote! {
        fn foo() {
            #expr?;
        }
    };

    TokenStream::from(expanded)
}

//file call the macro
mdriver!(0..10);

I expected to see this happen:

fn foo() {
        match #[lang = "branch"](#[lang = "Range"]{ start: 0,  end: 10,}) {
                #[lang = "Break"] {  0: residual } =>
                    #[allow(unreachable_code)]
                    return #[lang = "from_residual"](residual),
                #[lang = "Continue"] {  0: val } =>
                    #[allow(unreachable_code)]
                    val,
            };
    }

Instead, this happened:

fn foo() {
        #[lang = "Range"]{
            start: 0,

            end:
                match #[lang = "branch"](10) {
                        #[lang = "Break"] {  0: residual } =>
                            #[allow(unreachable_code)]
                            return #[lang = "from_residual"](residual),
                        #[lang = "Continue"] {  0: val } =>
                            #[allow(unreachable_code)]
                            val,
                    },};
    }

Meta

rustc --version --verbose:

rustc 1.80.0-nightly (ef0027897 2024-05-12)
binary: rustc
commit-hash: ef0027897d2e9014766fb47dce9ddbb925d2f540
commit-date: 2024-05-12
host: x86_64-unknown-linux-gnu
release: 1.80.0-nightly
LLVM version: 18.1.4
Backtrace

<backtrace>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    A-prettyArea: Pretty printing (including `-Z unpretty`)A-proc-macrosArea: Procedural macrosC-bugCategory: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions