Skip to content

Commit d141475

Browse files
committed
Auto merge of #158135 - JonathanBrouwer:rollup-8eplKqK, r=JonathanBrouwer
Rollup of 4 pull requests Successful merges: - #157926 (Implement `#[diagnostic::on_unknown]` for modules.) - #158084 (`-Znext-solver` Emit error instead of ICE when combining {int, float} var with alias) - #158128 (std: use correct low surrogate range in Windows standard I/O code) - #158132 (std: correctly report file size on UWP)
2 parents 0c1748c + f730795 commit d141475

39 files changed

Lines changed: 778 additions & 251 deletions

compiler/rustc_attr_parsing/src/attributes/diagnostic/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,7 @@ fn parse_arg(
460460

461461
(Mode::DiagnosticOnTypeError, sym::Found) => FormatArg::Found,
462462
(Mode::DiagnosticOnTypeError, sym::Expected) => FormatArg::Expected,
463+
(Mode::DiagnosticOnUnknown, sym::Unresolved) => FormatArg::Unresolved,
463464

464465
// Some diagnostic attributes can use `{This}` to refer to the annotated item.
465466
// For those that don't, we continue and maybe use it as a generic parameter.

compiler/rustc_attr_parsing/src/attributes/diagnostic/on_unknown.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use rustc_session::lint::builtin::MISPLACED_DIAGNOSTIC_ATTRIBUTES;
55
use crate::ShouldEmit;
66
use crate::attributes::diagnostic::*;
77
use crate::attributes::prelude::*;
8-
use crate::diagnostics::DiagnosticOnUnknownOnlyForImports;
8+
use crate::diagnostics::DiagnosticOnUnknownInvalidTarget;
99

1010
#[derive(Default)]
1111
pub(crate) struct OnUnknownParser {
@@ -29,11 +29,11 @@ impl OnUnknownParser {
2929
// Therefore, only do target checking if we can emit.
3030
let early = matches!(cx.should_emit, ShouldEmit::Nothing);
3131

32-
if !early && !matches!(cx.target, Target::Use) {
32+
if !early && !matches!(cx.target, Target::Use | Target::Mod | Target::Crate) {
3333
let target_span = cx.target_span;
3434
cx.emit_lint(
3535
MISPLACED_DIAGNOSTIC_ATTRIBUTES,
36-
DiagnosticOnUnknownOnlyForImports { target_span },
36+
DiagnosticOnUnknownInvalidTarget { target_span },
3737
span,
3838
);
3939
return;

compiler/rustc_attr_parsing/src/diagnostics.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,9 +295,11 @@ pub(crate) struct DiagnosticOnMoveOnlyForAdt;
295295
pub(crate) struct DiagnosticOnUnimplementedOnlyForTraits;
296296

297297
#[derive(Diagnostic)]
298-
#[diag("`#[diagnostic::on_unknown]` can only be applied to `use` statements")]
299-
pub(crate) struct DiagnosticOnUnknownOnlyForImports {
300-
#[label("not an import")]
298+
#[diag(
299+
"`#[diagnostic::on_unknown]` can only be applied to `use` statements and module declarations"
300+
)]
301+
pub(crate) struct DiagnosticOnUnknownInvalidTarget {
302+
#[label("not an import or module")]
301303
pub target_span: Span,
302304
}
303305

compiler/rustc_hir/src/attrs/diagnostic.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ pub struct CustomDiagnostic {
9292
}
9393

9494
impl CustomDiagnostic {
95-
fn update(&mut self, di: &Directive, args: &FormatArgs) {
95+
pub fn update(&mut self, di: &Directive, args: &FormatArgs) {
9696
if self.message.is_none() {
9797
self.message = di.message.as_ref().map(|m| m.1.format(args));
9898
}
@@ -153,6 +153,9 @@ impl FormatString {
153153
Piece::Arg(FormatArg::Found) => ret.push_str(&args.found),
154154
Piece::Arg(FormatArg::Expected) => ret.push_str(&args.expected),
155155

156+
// only for on_unknown
157+
Piece::Arg(FormatArg::Unresolved) => ret.push_str(&args.unresolved),
158+
156159
// It's only `rustc_onunimplemented` from here
157160
Piece::Arg(FormatArg::ThisPath) => ret.push_str(&args.this_path),
158161
Piece::Arg(FormatArg::ThisResolved) => {
@@ -215,6 +218,7 @@ pub struct FormatArgs {
215218
pub this_path: String = String::new(),
216219
pub found: String = String::new(),
217220
pub expected: String = String::new(),
221+
pub unresolved: String = String::new(),
218222
pub item_context: &'static str = "",
219223
pub generic_args: Vec<(Symbol, String)> = Vec::new(),
220224
}
@@ -248,6 +252,8 @@ pub enum FormatArg {
248252
Found,
249253
/// {Expected} in diagnostic::on_type_error
250254
Expected,
255+
/// {Unresolved} in diagnostic::on_unknown
256+
Unresolved,
251257
}
252258

253259
/// Represents the `on` filter in `#[rustc_on_unimplemented]`.

compiler/rustc_resolve/src/build_reduced_graph.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ use tracing::debug;
3131

3232
use crate::Namespace::{MacroNS, TypeNS, ValueNS};
3333
use crate::def_collector::DefCollector;
34-
use crate::error_helper::StructCtor;
35-
use crate::imports::{ImportData, ImportKind, OnUnknownData};
34+
use crate::error_helper::{OnUnknownData, StructCtor};
35+
use crate::imports::{ImportData, ImportKind};
3636
use crate::macros::{MacroRulesDecl, MacroRulesScope, MacroRulesScopeRef};
3737
use crate::ref_mut::CmCell;
3838
use crate::{
@@ -548,7 +548,7 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
548548
root_id,
549549
vis,
550550
vis_span: item.vis.span,
551-
on_unknown_attr: OnUnknownData::from_attrs(self.r.tcx, item),
551+
on_unknown_attr: OnUnknownData::from_attrs(self.r.tcx, &item.attrs),
552552
});
553553

554554
self.r.indeterminate_imports.push(import);
@@ -863,6 +863,9 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
863863
|| ast::attr::contains_name(&item.attrs, sym::no_implicit_prelude),
864864
);
865865
self.parent_scope.module = module.to_module();
866+
if let Some(directive) = OnUnknownData::from_attrs(self.r.tcx, &item.attrs) {
867+
self.r.on_unknown_data.insert(local_def_id, directive);
868+
}
866869
}
867870

868871
// These items live in the value namespace.
@@ -1037,7 +1040,7 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
10371040
module_path: Vec::new(),
10381041
vis,
10391042
vis_span: item.vis.span,
1040-
on_unknown_attr: OnUnknownData::from_attrs(self.r.tcx, item),
1043+
on_unknown_attr: OnUnknownData::from_attrs(self.r.tcx, &item.attrs),
10411044
});
10421045
if used {
10431046
self.r.import_use_map.insert(import, Used::Other);
@@ -1169,7 +1172,7 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
11691172
module_path: Vec::new(),
11701173
vis: Visibility::Restricted(CRATE_DEF_ID),
11711174
vis_span: item.vis.span,
1172-
on_unknown_attr: OnUnknownData::from_attrs(this.r.tcx, item),
1175+
on_unknown_attr: OnUnknownData::from_attrs(this.r.tcx, &item.attrs),
11731176
})
11741177
};
11751178

@@ -1350,7 +1353,7 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
13501353
module_path: Vec::new(),
13511354
vis,
13521355
vis_span: item.vis.span,
1353-
on_unknown_attr: OnUnknownData::from_attrs(self.r.tcx, item),
1356+
on_unknown_attr: OnUnknownData::from_attrs(self.r.tcx, &item.attrs),
13541357
});
13551358
self.r.import_use_map.insert(import, Used::Other);
13561359
let import_decl = self.r.new_import_decl(decl, import);

0 commit comments

Comments
 (0)