@@ -698,33 +698,27 @@ impl<'psess, 'src> StringReader<'psess, 'src> {
698
698
let expn_data = prefix_span. ctxt ( ) . outer_expn_data ( ) ;
699
699
700
700
if expn_data. edition >= Edition :: Edition2021 {
701
- let mut silence = false ;
702
701
// In Rust 2021, this is a hard error.
703
702
let sugg = if prefix == "rb" {
704
703
Some ( errors:: UnknownPrefixSugg :: UseBr ( prefix_span) )
705
704
} else if expn_data. is_root ( ) {
706
705
if self . cursor . first ( ) == '\''
707
706
&& let Some ( start) = self . last_lifetime
708
707
&& self . cursor . third ( ) != '\''
708
+ && let end = self . mk_sp ( self . pos , self . pos + BytePos ( 1 ) )
709
+ && !self . psess . source_map ( ) . is_multiline ( start. until ( end) )
709
710
{
710
- // An "unclosed `char`" error will be emitted already, silence redundant error.
711
- silence = true ;
712
- Some ( errors:: UnknownPrefixSugg :: MeantStr {
713
- start,
714
- end : self . mk_sp ( self . pos , self . pos + BytePos ( 1 ) ) ,
715
- } )
711
+ // FIXME: An "unclosed `char`" error will be emitted already in some cases,
712
+ // but it's hard to silence this error while not also silencing important cases
713
+ // too. We should use the error stashing machinery instead.
714
+ Some ( errors:: UnknownPrefixSugg :: MeantStr { start, end } )
716
715
} else {
717
716
Some ( errors:: UnknownPrefixSugg :: Whitespace ( prefix_span. shrink_to_hi ( ) ) )
718
717
}
719
718
} else {
720
719
None
721
720
} ;
722
- let err = errors:: UnknownPrefix { span : prefix_span, prefix, sugg } ;
723
- if silence {
724
- self . dcx ( ) . create_err ( err) . delay_as_bug ( ) ;
725
- } else {
726
- self . dcx ( ) . emit_err ( err) ;
727
- }
721
+ self . dcx ( ) . emit_err ( errors:: UnknownPrefix { span : prefix_span, prefix, sugg } ) ;
728
722
} else {
729
723
// Before Rust 2021, only emit a lint for migration.
730
724
self . psess . buffer_lint_with_diagnostic (
0 commit comments