Skip to content

Macros can fail to resolve an identifier rebinded in local scope. #26223

@Ryman

Description

@Ryman
Contributor

Unsure of a better title for this, but I don't see why it's invalid to do. It makes adding some additional debug logging inside macros quite tedious. This example is a simple modification of one of the macros defined in the rust book (just above the introduction to recursive macros).

macro_rules! foo {
    ($v:ident) => (
        let $v = 3;
        println!("{}", $v); // If you comment this then it's fine.
    );
}

fn main() {
    foo!(x);
    println!("{}", x);
}

Expected:
print 3 (the value of x) twice

Actual:

<anon>:4:24: 4:26 error: unresolved name `x`
<anon>:4         println!("{}", $v); // If you comment this then it's fine.
                                ^~
note: in expansion of format_args!
<std macros>:2:25: 2:56 note: expansion site
<std macros>:1:1: 2:62 note: in expansion of print!
<std macros>:3:1: 3:54 note: expansion site
<std macros>:1:1: 3:58 note: in expansion of println!
<anon>:4:9: 4:27 note: expansion site
<anon>:1:1: 6:2 note: in expansion of foo!
<anon>:9:5: 9:13 note: expansion site

playpen link
cc @jbclements

Activity

jbclements

jbclements commented on Jun 11, 2015

@jbclements
Contributor

Yes, this looks totally broken to me.

added
A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)
on Jun 15, 2015
jseyfried

jseyfried commented on Jun 9, 2016

@jseyfried
Contributor

This was fixed in #32923.

TimNN

TimNN commented on Sep 16, 2016

@TimNN
Contributor

Closing, since this has been fixed.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @steveklabnik@jbclements@Ryman@TimNN@jseyfried

        Issue actions

          Macros can fail to resolve an identifier rebinded in local scope. · Issue #26223 · rust-lang/rust