@@ -1763,13 +1763,33 @@ impl<'a: 'ast, 'b, 'ast> LateResolutionVisitor<'a, 'b, 'ast> {
1763
1763
// to something unusable as a pattern (e.g., constructor function),
1764
1764
// but we still conservatively report an error, see
1765
1765
// issues/33118#issuecomment-233962221 for one reason why.
1766
+ let binding = binding. expect ( "no binding for a ctor or static" ) ;
1766
1767
self . report_error (
1767
1768
ident. span ,
1768
- ResolutionError :: BindingShadowsSomethingUnacceptable (
1769
- pat_src. descr ( ) ,
1770
- ident. name ,
1771
- binding. expect ( "no binding for a ctor or static" ) ,
1772
- ) ,
1769
+ ResolutionError :: BindingShadowsSomethingUnacceptable {
1770
+ shadowing_binding_descr : pat_src. descr ( ) ,
1771
+ name : ident. name ,
1772
+ participle : if binding. is_import ( ) { "imported" } else { "defined" } ,
1773
+ article : binding. res ( ) . article ( ) ,
1774
+ shadowed_binding_descr : binding. res ( ) . descr ( ) ,
1775
+ shadowed_binding_span : binding. span ,
1776
+ } ,
1777
+ ) ;
1778
+ None
1779
+ }
1780
+ Res :: Def ( DefKind :: ConstParam , def_id) => {
1781
+ // Same as for DefKind::Const above, but here, `binding` is `None`, so we
1782
+ // have to construct the error differently
1783
+ self . report_error (
1784
+ ident. span ,
1785
+ ResolutionError :: BindingShadowsSomethingUnacceptable {
1786
+ shadowing_binding_descr : pat_src. descr ( ) ,
1787
+ name : ident. name ,
1788
+ participle : "defined" ,
1789
+ article : res. article ( ) ,
1790
+ shadowed_binding_descr : res. descr ( ) ,
1791
+ shadowed_binding_span : self . r . opt_span ( def_id) . expect ( "const parameter defined outside of local crate" ) ,
1792
+ }
1773
1793
) ;
1774
1794
None
1775
1795
}
0 commit comments