# Spans from built-in macro expansions are not "from expansion"

**URL:** <https://internals.rust-lang.org/t/spans-from-built-in-macro-expansions-are-not-from-expansion/11276>\
**Category:** compiler\
**Created:** [November 11, 2019, 4:07pm UTC](https://internals.rust-lang.org/t/spans-from-built-in-macro-expansions-are-not-from-expansion/11276 "2019-11-11T16:07:23Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![euclio](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/euclio/32/4705_2.png) [@euclio](https://internals.rust-lang.org/u/euclio)\
**Post date:** [November 11, 2019, 4:07pm UTC](https://internals.rust-lang.org/t/spans-from-built-in-macro-expansions-are-not-from-expansion/11276/1 "2019-11-11T16:07:23Z")

</div>

While working on a late-pass clippy lint, I found that calling `from_expansion` on string literal spans from built-in macros like `stringify!` and `include_str!` returns `false`. Is there a more correct way to check if these spans came from a built-in macro expansion, or is this a bug in `rustc`?

---

<div class="post-metadata">

**Author:** ![Tom-Phinney](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/tom-phinney/32/3299_2.png) [@Tom-Phinney](https://internals.rust-lang.org/u/Tom-Phinney)\
**Post date:** [November 11, 2019, 4:33pm UTC](https://internals.rust-lang.org/t/spans-from-built-in-macro-expansions-are-not-from-expansion/11276/2 "2019-11-11T16:33:38Z")

</div>

This query belongs in [users.rust-lang.org (URLO)](https://users.rust-lang.org/); this IRLO forum is for proposed enhancements and/or changes to Rust's language and tooling.

---

<div class="post-metadata">

**Author:** ![RustyYato](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/rustyyato/32/13627_2.png) [@RustyYato](https://internals.rust-lang.org/u/RustyYato)\
**Post date:** [November 11, 2019, 5:14pm UTC](https://internals.rust-lang.org/t/spans-from-built-in-macro-expansions-are-not-from-expansion/11276/3 "2019-11-11T17:14:37Z")

</div>

I think this is fine here because it is directly relatted to compiler internals, and there wouldn't be enough people who know about that on users

---

<div class="post-metadata">

**Author:** ![petrochenkov](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/petrochenkov/32/2784_2.png) [@petrochenkov](https://internals.rust-lang.org/u/petrochenkov)\
**Post date:** [November 11, 2019, 5:55pm UTC](https://internals.rust-lang.org/t/spans-from-built-in-macro-expansions-are-not-from-expansion/11276/4 "2019-11-11T17:55:11Z")

</div>

Both `stringify` and `include_str` are buggy, and do not produce correct spans.  
Some other built-in macros may be similarly buggy as well.

The fix is to create the output expression with span `cx.with_def_site_ctxt(sp)` instead of just `sp`.  
The relevant code is in `libsyntax_ext/source_util.rs`.

---

<div class="post-metadata">

**Author:** ![euclio](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/euclio/32/4705_2.png) [@euclio](https://internals.rust-lang.org/u/euclio)\
**Post date:** [November 11, 2019, 6:43pm UTC](https://internals.rust-lang.org/t/spans-from-built-in-macro-expansions-are-not-from-expansion/11276/5 "2019-11-11T18:43:03Z")

</div>

Thanks for the help. I'll work on a PR to fix it.

---

<div class="post-metadata">

**Author:** ![system](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/system/32/14092_2.png) [@system](https://internals.rust-lang.org/u/system)\
**Post date:** [February 9, 2020, 6:43pm UTC](https://internals.rust-lang.org/t/spans-from-built-in-macro-expansions-are-not-from-expansion/11276/6 "2020-02-09T18:43:11Z")

</div>

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.
