diff options
| author | bors <bors@rust-lang.org> | 2020-12-10 00:42:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-12-10 00:42:22 +0000 |
| commit | 58d2bad9f7ab0971495247b6c94978848760ca9d (patch) | |
| tree | 315d7590aaf43425cbc0a9d69c05dc896ad68909 /compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp | |
| parent | 1cc410710993d036730c11556039e40109f6ab41 (diff) | |
| parent | 31d72c2658e3ca3c51bb08ff5152c815d595e7ac (diff) | |
| download | rust-58d2bad9f7ab0971495247b6c94978848760ca9d.tar.gz rust-58d2bad9f7ab0971495247b6c94978848760ca9d.zip | |
Auto merge of #78837 - petrochenkov:keyvalexpr, r=davidtwco
Accept arbitrary expressions in key-value attributes at parse time
Continuation of https://github.com/rust-lang/rust/pull/77271.
We now support arbitrary expressions in values of key-value attributes at parse time.
```
#[my_attr = EXPR]
```
Previously only unsuffixed literals and interpolated expressions (`$expr`) were accepted.
There are two immediate motivational cases for this:
- External doc strings (`#[doc = include_str!("my_doc.md")]`, eliminating the need in https://github.com/rust-lang/rust/issues/44732) and expanding macros in this position in general. Currently such macro expansions are supported in this position in interpolated `$expr`s (the `#[doc = $doc]` idiom).
- Paths (`#[namespace = foo::bar] extern "C++" { ... }`) like proposed in https://github.com/rust-lang/rust/pull/76734.
If the attribute in question survives expansion, then the value is still restricted to unsuffixed literals by a semantic check.
This restriction doesn't prevent the use cases listed above, so this PR keeps it in place for now.
Closes https://github.com/rust-lang/rust/issues/52607.
Previous attempt - https://github.com/rust-lang/rust/pull/67121.
Some more detailed write up on internals - https://internals.rust-lang.org/t/macro-expansion-points-in-attributes/11455.
Tracking issue - https://github.com/rust-lang/rust/issues/78835.
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
