9eb596ce8f
Unstable items used in a macro expansion will now always trigger stability warnings, *unless* the unstable items are directly inside a macro marked with `#[allow_internal_unstable]`. IOW, the compiler warns unless the span of the unstable item is a subspan of the definition of a macro marked with that attribute. E.g. #[allow_internal_unstable] macro_rules! foo { ($e: expr) => {{ $e; unstable(); // no warning only_called_by_foo!(); }} } macro_rules! only_called_by_foo { () => { unstable() } // warning } foo!(unstable()) // warning The unstable inside `foo` is fine, due to the attribute. But the `unstable` inside `only_called_by_foo` is not, since that macro doesn't have the attribute, and the `unstable` passed into `foo` is also not fine since it isn't contained in the macro itself (that is, even though it is only used directly in the macro). In the process this makes the stability tracking much more precise, e.g. previously `println!(\"{}\", unstable())` got no warning, but now it does. As such, this is a bug fix that may cause [breaking-change]s. The attribute is definitely feature gated, since it explicitly allows side-stepping the feature gating system. --- This updates `thread_local!` macro to use the attribute, since it uses unstable features internally (initialising a struct with unstable fields). |
||
---|---|---|
.. | ||
cfg | ||
infer | ||
traits | ||
astconv_util.rs | ||
astencode.rs | ||
check_const.rs | ||
check_loop.rs | ||
check_match.rs | ||
check_rvalues.rs | ||
check_static_recursion.rs | ||
const_eval.rs | ||
dataflow.rs | ||
dead.rs | ||
def.rs | ||
dependency_format.rs | ||
effect.rs | ||
entry.rs | ||
expr_use_visitor.rs | ||
fast_reject.rs | ||
graph.rs | ||
intrinsicck.rs | ||
lang_items.rs | ||
liveness.rs | ||
mem_categorization.rs | ||
pat_util.rs | ||
privacy.rs | ||
reachable.rs | ||
recursion_limit.rs | ||
region.rs | ||
resolve_lifetime.rs | ||
stability.rs | ||
subst.rs | ||
ty_fold.rs | ||
ty_walk.rs | ||
ty.rs | ||
weak_lang_items.rs |