diff options
| author | bors <bors@rust-lang.org> | 2023-05-05 15:59:20 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-05-05 15:59:20 +0000 |
| commit | 4b94c232192b0fa0314b5afa18e366356e210c4c (patch) | |
| tree | 5e16d07c49b6de25df631d2e0a9ef9947795714c /compiler/rustc_session/src/errors.rs | |
| parent | 4a18324a4df6bc98bec0b54d35908d7a9cdc7c32 (diff) | |
| parent | c99ab29e6b2736006f22781802f3b5bd805139af (diff) | |
| download | rust-4b94c232192b0fa0314b5afa18e366356e210c4c.tar.gz rust-4b94c232192b0fa0314b5afa18e366356e210c4c.zip | |
Auto merge of #111248 - Dylan-DPC:rollup-lbp0ui3, r=Dylan-DPC
Rollup of 6 pull requests
Successful merges:
- #103056 (Fix `checked_{add,sub}_duration` incorrectly returning `None` when `other` has more than `i64::MAX` seconds)
- #108801 (Implement RFC 3348, `c"foo"` literals)
- #110773 (Reduce MIR dump file count for MIR-opt tests)
- #110876 (Added default target cpu to `--print target-cpus` output and updated docs)
- #111068 (Improve check-cfg implementation)
- #111238 (btree_map: `Cursor{,Mut}::peek_prev` must agree)
Failed merges:
- #110694 (Implement builtin # syntax and use it for offset_of!(...))
r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_session/src/errors.rs')
| -rw-r--r-- | compiler/rustc_session/src/errors.rs | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/compiler/rustc_session/src/errors.rs b/compiler/rustc_session/src/errors.rs index 0df62c2064e..546c0fa8e03 100644 --- a/compiler/rustc_session/src/errors.rs +++ b/compiler/rustc_session/src/errors.rs @@ -6,7 +6,7 @@ use rustc_ast::token; use rustc_ast::util::literal::LitError; use rustc_errors::{error_code, DiagnosticMessage, EmissionGuarantee, IntoDiagnostic, MultiSpan}; use rustc_macros::Diagnostic; -use rustc_span::{Span, Symbol}; +use rustc_span::{BytePos, Span, Symbol}; use rustc_target::spec::{SplitDebuginfo, StackProtector, TargetTriple}; #[derive(Diagnostic)] @@ -323,6 +323,13 @@ pub(crate) struct BinaryFloatLiteralNotSupported { pub span: Span, } +#[derive(Diagnostic)] +#[diag(session_nul_in_c_str)] +pub(crate) struct NulInCStr { + #[primary_span] + pub span: Span, +} + pub fn report_lit_error(sess: &ParseSess, err: LitError, lit: token::Lit, span: Span) { // Checks if `s` looks like i32 or u1234 etc. fn looks_like_width_suffix(first_chars: &[char], s: &str) -> bool { @@ -401,6 +408,12 @@ pub fn report_lit_error(sess: &ParseSess, err: LitError, lit: token::Lit, span: }; sess.emit_err(IntLiteralTooLarge { span, limit }); } + LitError::NulInCStr(range) => { + let lo = BytePos(span.lo().0 + range.start as u32 + 2); + let hi = BytePos(span.lo().0 + range.end as u32 + 2); + let span = span.with_lo(lo).with_hi(hi); + sess.emit_err(NulInCStr { span }); + } } } |
