Fix error message for calling a non-tuple struct
diff --git a/compiler/rustc_resolve/src/late/diagnostics.rs b/compiler/rustc_resolve/src/late/diagnostics.rs
index 0b4c52d..74afae7 100644
--- a/compiler/rustc_resolve/src/late/diagnostics.rs
+++ b/compiler/rustc_resolve/src/late/diagnostics.rs
@@ -823,8 +823,10 @@ fn try_lookup_name_relaxed(
                 }
 
                 if let Some(Res::Def(DefKind::Struct, def_id)) = res {
-                    self.update_err_for_private_tuple_struct_fields(err, &source, def_id);
-                    err.note("constructor is not visible here due to private fields");
+                    if self.has_private_fields(def_id) {
+                        self.update_err_for_private_tuple_struct_fields(err, &source, def_id);
+                        err.note("constructor is not visible here due to private fields");
+                    }
                 } else {
                     err.span_suggestion(
                         call_span,
@@ -1642,6 +1644,17 @@ fn followed_by_brace(&self, span: Span) -> (bool, Option<Span>) {
         }
     }
 
+    fn has_tuple_fields(&mut self, def_id: DefId) -> bool {
+        // As we cannot name a field "0", this is an indictation
+        // that we are looking at a tuple struct
+        if let Some(fields) = self.r.field_idents(def_id) {
+            if let Some(first_field) = fields.get(0) {
+                return first_field.name.as_str() == "0";
+            }
+        }
+        false
+    }
+
     fn update_err_for_private_tuple_struct_fields(
         &mut self,
         err: &mut Diag<'_>,
@@ -1664,17 +1677,18 @@ fn update_err_for_private_tuple_struct_fields(
                 span: call_span,
                 ..
             })) => {
-                err.primary_message(
-                    "cannot initialize a tuple struct which contains private fields",
-                );
-                self.suggest_alternative_construction_methods(
-                    def_id,
-                    err,
-                    path.span,
-                    *call_span,
-                    &args[..],
-                );
-                // Use spans of the tuple struct definition.
+                if self.has_tuple_fields(def_id) {
+                    err.primary_message(
+                        "cannot initialize a tuple struct which contains private fields",
+                    );
+                    self.suggest_alternative_construction_methods(
+                        def_id,
+                        err,
+                        path.span,
+                        *call_span,
+                        &args[..],
+                    );
+                }
                 self.r
                     .field_idents(def_id)
                     .map(|fields| fields.iter().map(|f| f.span).collect::<Vec<_>>())
diff --git a/tests/ui/resolve/regression-struct-called-as-function-148919.rs b/tests/ui/resolve/regression-struct-called-as-function-148919.rs
new file mode 100644
index 0000000..7358e17
--- /dev/null
+++ b/tests/ui/resolve/regression-struct-called-as-function-148919.rs
@@ -0,0 +1,10 @@
+struct Bar {}
+
+impl Bar {
+    fn into_self(self) -> Bar {
+        Bar(self)
+        //~^ ERROR expected function, tuple struct or tuple variant, found struct `Bar` [E0423]
+    }
+}
+
+fn main() {}
diff --git a/tests/ui/resolve/regression-struct-called-as-function-148919.stderr b/tests/ui/resolve/regression-struct-called-as-function-148919.stderr
new file mode 100644
index 0000000..d3e62b3
--- /dev/null
+++ b/tests/ui/resolve/regression-struct-called-as-function-148919.stderr
@@ -0,0 +1,9 @@
+error[E0423]: expected function, tuple struct or tuple variant, found struct `Bar`
+  --> $DIR/regression-struct-called-as-function-148919.rs:5:9
+   |
+LL |         Bar(self)
+   |         ^^^
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0423`.