Remove the MacroVisitor pass.
This pass was supposed to check use of gated features before `#[cfg]`-stripping but this was not the case since it in fact happens after. Checks that are actually important and must be done before macro expansion are now made where the features are actually used. Close #32648. Also ensure that attributes on macro-generated macro invocations are checked as well. Close #32782 and #32655.
This commit is contained in:
parent
11f1eb0c4e
commit
03ab057f97
11 changed files with 208 additions and 200 deletions
|
|
@ -512,19 +512,13 @@ pub fn phase_2_configure_and_expand(sess: &Session,
|
|||
middle::recursion_limit::update_recursion_limit(sess, &krate);
|
||||
});
|
||||
|
||||
time(time_passes, "gated macro checking", || {
|
||||
sess.track_errors(|| {
|
||||
let features =
|
||||
syntax::feature_gate::check_crate_macros(sess.codemap(),
|
||||
&sess.parse_sess.span_diagnostic,
|
||||
&krate);
|
||||
|
||||
// these need to be set "early" so that expansion sees `quote` if enabled.
|
||||
*sess.features.borrow_mut() = features;
|
||||
})
|
||||
// these need to be set "early" so that expansion sees `quote` if enabled.
|
||||
sess.track_errors(|| {
|
||||
*sess.features.borrow_mut() =
|
||||
syntax::feature_gate::get_features(&sess.parse_sess.span_diagnostic,
|
||||
&krate);
|
||||
})?;
|
||||
|
||||
|
||||
krate = time(time_passes, "crate injection", || {
|
||||
syntax::std_inject::maybe_inject_crates_ref(krate, sess.opts.alt_std_name.clone())
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue