Skip to content

Can't #[bench] a function named b #148275

@theemathas

Description

@theemathas
#![feature(test)] extern crate test; #[bench] fn b(_: &mut test::bench::Bencher) {}

I should be able to run this as a benchmark, but I got the following error:

error[E0308]: mismatched types --> src/lib.rs:6:1 | 5 | #[bench] | -------- in this attribute macro expansion 6 | fn b(_: &mut test::bench::Bencher) {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | expected `&mut Bencher`, found `TestDescAndFn` | expected due to this | constant defined here | `b` is interpreted as a constant, not a new binding | help: introduce a new binding instead: `other_b` error[E0308]: mismatched types --> src/lib.rs:6:1 | 5 | #[bench] | -------- in this attribute macro expansion 6 | fn b(_: &mut test::bench::Bencher) {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | expected `&mut Bencher`, found `TestDescAndFn` | arguments to this function are incorrect | note: function defined here --> src/lib.rs:6:4 | 6 | fn b(_: &mut test::bench::Bencher) {} | ^ ---------------------------- For more information about this error, try `rustc --explain E0308`. 

It seems that the macro expansion of #[bench] has a name collision with a variable named b.

// A simple ident for a lambda
let b = Ident::from_str_and_span("b", attr_sp);
cx.expr_call(
sp,
cx.expr_path(test_path("StaticBenchFn")),
thin_vec![
// #[coverage(off)]
// |b| self::test::assert_test_result(

Meta

Reproducible on the playground with version 1.93.0-nightly (2025-10-28 278a90913daf77077910) (click on the three dots on top left -> "test")

Metadata

Metadata

Assignees

Labels

A-hygieneArea: Macro hygieneA-libtestArea: `#[test]` / the `test` libraryA-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)C-bugCategory: This is a bug.T-testing-devexRelevant to the testing devex team (testing DX), which will review and decide on the PR/issue.

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions