diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 29ca160fac0d..e21f619d6c37 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -2730,6 +2730,18 @@ impl<'a> Resolver<'a> { } return (err, candidates); } + (Def::VariantCtor(_, ctor_kind), _) if ns == ValueNS && is_struct_like(def) => { + let block = match ctor_kind { + CtorKind::Fn => "(/* fields */)", + CtorKind::Fictive => " { /* fields */ }", + def => bug!("found def `{:?}` when looking for a ctor", + def), + }; + err.span_label(span, format!("did you mean `{}{}`?", + path_str, + block)); + return (err, candidates); + } _ => {} } } diff --git a/src/test/ui/resolve/issue-18252.stderr b/src/test/ui/resolve/issue-18252.stderr index f93007c8b614..edc7196d8464 100644 --- a/src/test/ui/resolve/issue-18252.stderr +++ b/src/test/ui/resolve/issue-18252.stderr @@ -2,7 +2,7 @@ error[E0423]: expected function, found struct variant `Foo::Variant` --> $DIR/issue-18252.rs:16:13 | 16 | let f = Foo::Variant(42); - | ^^^^^^^^^^^^ not a function + | ^^^^^^^^^^^^ did you mean `Foo::Variant { /* fields */ }`? error: aborting due to previous error diff --git a/src/test/ui/resolve/issue-19452.stderr b/src/test/ui/resolve/issue-19452.stderr index 44690158b587..7b14d49af51d 100644 --- a/src/test/ui/resolve/issue-19452.stderr +++ b/src/test/ui/resolve/issue-19452.stderr @@ -2,13 +2,13 @@ error[E0423]: expected value, found struct variant `Homura::Madoka` --> $DIR/issue-19452.rs:19:18 | 19 | let homura = Homura::Madoka; - | ^^^^^^^^^^^^^^ not a value + | ^^^^^^^^^^^^^^ did you mean `Homura::Madoka { /* fields */ }`? error[E0423]: expected value, found struct variant `issue_19452_aux::Homura::Madoka` --> $DIR/issue-19452.rs:22:18 | 22 | let homura = issue_19452_aux::Homura::Madoka; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not a value + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ did you mean `issue_19452_aux::Homura::Madoka { /* fields */ }`? error: aborting due to 2 previous errors