rust/compiler
bors fd0a3313f7 Auto merge of #112261 - jieyouxu:c-like-ptr-arithmetics-diagnostics, r=WaffleLapkin
Add help for trying to do C-like pointer arithmetics

This PR adds help messages for these cases:

```rust
fn main() {
    let ptr1: *const u32 = std::ptr::null();
    let ptr2: *const u32 = std::ptr::null();
    let a = ptr1 + 5;
    let b = ptr1 - 5;
    let c = ptr2 - ptr1;
    let d = ptr1[5];
}
```

### Current Output

```
error[E0369]: cannot add `{integer}` to `*const u32`
 --> tests/ui/typeck/issue-112252-ptr-arithmetics-help.rs:4:18
  |
4 |     let a = ptr1 + 5; //~ ERROR cannot add
  |             ---- ^ - {integer}
  |             |
  |             *const u32

error[E0369]: cannot subtract `{integer}` from `*const u32`
 --> tests/ui/typeck/issue-112252-ptr-arithmetics-help.rs:5:18
  |
5 |     let b = ptr1 - 5; //~ ERROR cannot subtract
  |             ---- ^ - {integer}
  |             |
  |             *const u32

error[E0369]: cannot subtract `*const u32` from `*const u32`
 --> tests/ui/typeck/issue-112252-ptr-arithmetics-help.rs:6:18
  |
6 |     let c = ptr2 - ptr1; //~ ERROR cannot subtract
  |             ---- ^ ---- *const u32
  |             |
  |             *const u32

error[E0608]: cannot index into a value of type `*const u32`
 --> tests/ui/typeck/issue-112252-ptr-arithmetics-help.rs:7:13
  |
7 |     let d = ptr1[5]; //~ ERROR cannot index
  |             ^^^^^^^

error: aborting due to 4 previous errors
```

### Output After This PR

```
error[E0369]: cannot add `{integer}` to `*const u32`
  --> $DIR/issue-112252-ptr-arithmetics-help.rs:6:20
   |
LL |     let _a = _ptr1 + 5;
   |              ------^--
   |              |       |
   |              |       {integer}
   |              *const u32
   |              help: consider using `wrapping_add` or `add` for pointer + {integer}: `_ptr1.wrapping_add(5)`

error[E0369]: cannot subtract `{integer}` from `*const u32`
  --> $DIR/issue-112252-ptr-arithmetics-help.rs:7:20
   |
LL |     let _b = _ptr1 - 5;
   |              ------^--
   |              |       |
   |              |       {integer}
   |              *const u32
   |              help: consider using `offset` for pointer - {integer}: `unsafe { _ptr1.offset(-5) }`

error[E0369]: cannot subtract `*const u32` from `*const u32`
  --> $DIR/issue-112252-ptr-arithmetics-help.rs:8:20
   |
LL |     let _c = _ptr2 - _ptr1;
   |              ------^------
   |              |       |
   |              |       *const u32
   |              *const u32
   |              help: consider using `offset_from` for pointer - pointer if the pointers point to the same allocation: `_ptr2.offset_from(_ptr1)`

error[E0608]: cannot index into a value of type `*const u32`
  --> $DIR/issue-112252-ptr-arithmetics-help.rs:9:14
   |
LL |     let _d = _ptr1[5];
   |              ^^^^^^^^
   |
help: consider using `wrapping_add` or `add` for indexing into raw pointer
   |
LL |     let _d = _ptr1.wrapping_add(5);
   |              ~~~~~~~~~~~~~~~~~~~~~

error: aborting due to 4 previous errors
```

Closes #112252.
2023-06-12 07:15:19 +00:00
..
rustc
rustc_abi Removed stable/unstable sort arg from into_sorted_stable_ord, fixed a few misc issues, added collect to UnordItems 2023-06-08 00:38:50 -04:00
rustc_apfloat
rustc_arena Deny the unsafe_op_in_unsafe_fn lint in 2023-04-28 21:00:54 -07:00
rustc_ast Remember names of cfg-ed out items to mention them in diagnostics 2023-06-01 19:17:19 +02:00
rustc_ast_lowering Separate AnonConst from ConstBlock in HIR. 2023-06-02 21:25:18 +00:00
rustc_ast_passes cleanup 2023-06-03 09:44:30 +08:00
rustc_ast_pretty Migrate offset_of from a macro to builtin # syntax 2023-05-05 21:44:13 +02:00
rustc_attr Ensure Fluent messages are in alphabetical order 2023-05-25 23:49:35 +00:00
rustc_baked_icu_data Regen baked data 2023-05-02 10:45:16 -07:00
rustc_borrowck split opaque type handling in new solver 2023-06-09 16:41:11 +02:00
rustc_builtin_macros Remove accidental comment 2023-06-07 17:16:34 +00:00
rustc_codegen_cranelift Updated cranelift codegen to reflect modified trait signature 2023-06-04 21:54:38 -04:00
rustc_codegen_gcc Updated cranelift codegen to reflect modified trait signature 2023-06-04 21:54:38 -04:00
rustc_codegen_llvm Auto merge of #110040 - ndrewxie:issue-84447-partial-1, r=lcnr,michaelwoerister 2023-06-08 07:30:03 +00:00
rustc_codegen_ssa Auto merge of #111626 - pjhades:output, r=b-naber 2023-06-09 09:45:40 +00:00
rustc_const_eval Auto merge of #108293 - Jarcho:mut_analyses, r=eholk 2023-06-08 23:58:44 +00:00
rustc_data_structures Don't print Interned or PrivateZst 2023-06-09 00:20:37 +00:00
rustc_driver fix spelling error 2023-06-05 16:01:09 +02:00
rustc_driver_impl Auto merge of #111626 - pjhades:output, r=b-naber 2023-06-09 09:45:40 +00:00
rustc_error_codes Implement custom diagnostic for ConstParamTy 2023-06-01 18:21:42 +00:00
rustc_error_messages Use translatable diagnostics in rustc_const_eval 2023-06-01 14:45:18 +00:00
rustc_errors Respect RUST_BACKTRACE for delayed bugs 2023-06-06 19:24:33 +00:00
rustc_expand expand: Change how #![cfg(FALSE)] behaves on crate root 2023-06-10 00:35:21 +03:00
rustc_feature cleanup 2023-06-03 09:44:30 +08:00
rustc_fluent_macro Remove unused synstructure dep 2023-04-22 22:03:33 +01:00
rustc_fs_util
rustc_graphviz enable rust_2018_idioms for doctests 2023-05-07 00:12:29 +03:00
rustc_hir Removed stable/unstable sort arg from into_sorted_stable_ord, fixed a few misc issues, added collect to UnordItems 2023-06-08 00:38:50 -04:00
rustc_hir_analysis iat selection: normalize self ty & completely erase bound vars 2023-06-11 00:19:47 +02:00
rustc_hir_pretty Separate AnonConst from ConstBlock in HIR. 2023-06-02 21:25:18 +00:00
rustc_hir_typeck Auto merge of #112261 - jieyouxu:c-like-ptr-arithmetics-diagnostics, r=WaffleLapkin 2023-06-12 07:15:19 +00:00
rustc_incremental Removed stable/unstable sort arg from into_sorted_stable_ord, fixed a few misc issues, added collect to UnordItems 2023-06-08 00:38:50 -04:00
rustc_index Auto merge of #111925 - Manishearth:rollup-z6z6l2v, r=Manishearth 2023-05-25 00:33:43 +00:00
rustc_infer Rollup merge of #112513 - compiler-errors:dont-compute-box-span-for-tait, r=cjgillot 2023-06-11 18:38:28 +02:00
rustc_interface Auto merge of #111626 - pjhades:output, r=b-naber 2023-06-09 09:45:40 +00:00
rustc_lexer Don't try to eat non-existent decimal digits. 2023-05-15 18:33:12 +10:00
rustc_lint Auto merge of #112494 - matthiaskrgr:rollup-xdf3om8, r=matthiaskrgr 2023-06-10 15:49:43 +00:00
rustc_lint_defs Private-in-public lints implementation 2023-06-12 01:02:19 +03:00
rustc_llvm Add SafeStack support to rustc 2023-05-26 15:18:54 -04:00
rustc_log Stabilize IsTerminal 2023-04-10 17:24:23 +09:00
rustc_macros Use translatable diagnostics in rustc_const_eval 2023-06-01 14:45:18 +00:00
rustc_metadata Auto merge of #111626 - pjhades:output, r=b-naber 2023-06-09 09:45:40 +00:00
rustc_middle Rollup merge of #109953 - thomcc:thomcc/typeid128, r=WaffleLapkin 2023-06-08 12:36:17 +02:00
rustc_mir_build Show note for type ascription interpreted as a constant pattern, not a new variable 2023-06-04 20:49:30 +08:00
rustc_mir_dataflow Auto merge of #108293 - Jarcho:mut_analyses, r=eholk 2023-06-08 23:58:44 +00:00
rustc_mir_transform Auto merge of #111626 - pjhades:output, r=b-naber 2023-06-09 09:45:40 +00:00
rustc_monomorphize Move mono_item_placement construction. 2023-06-07 11:02:15 +10:00
rustc_parse Rollup merge of #112498 - SamZhang3:rust-reference-link-update, r=Nilstrieb 2023-06-11 01:57:28 +02:00
rustc_parse_format Fix typos in compiler 2023-04-10 22:02:52 +02:00
rustc_passes Rollup merge of #112081 - obeis:doc-test-literal, r=compiler-errors 2023-06-05 23:47:57 +02:00
rustc_plugin_impl Add rustc_fluent_macro to decouple fluent from rustc_macros 2023-04-18 18:56:22 +00:00
rustc_privacy Private-in-public lints implementation 2023-06-12 01:02:19 +03:00
rustc_query_impl Update field-offset and enable unstable_offset_of 2023-06-05 15:57:13 +02:00
rustc_query_system Rollup merge of #112333 - Zoxc:try_collect_active_jobs-deadlock, r=cjgillot 2023-06-08 12:36:18 +02:00
rustc_resolve Auto merge of #112452 - MU001999:fix/issue-112439, r=petrochenkov 2023-06-10 05:07:53 +00:00
rustc_serialize Fix the FileEncoder buffer size. 2023-05-15 08:59:11 +10:00
rustc_session Auto merge of #111626 - pjhades:output, r=b-naber 2023-06-09 09:45:40 +00:00
rustc_smir Add Terminator::InlineAsm conversion from MIR to SMIR 2023-06-08 16:53:41 -03:00
rustc_span Rollup merge of #112475 - chenyukang:yukang-fix-112278, r=compiler-errors 2023-06-11 01:57:25 +02:00
rustc_symbol_mangling Rollup merge of #112182 - rcvalle:rust-cfi-fix-111185, r=compiler-errors 2023-06-02 18:12:45 +02:00
rustc_target Auto merge of #111698 - Amanieu:force-static-lib, r=petrochenkov 2023-06-07 22:02:24 +00:00
rustc_trait_selection Auto merge of #112466 - lcnr:opaque-type-cleanup, r=compiler-errors 2023-06-11 03:42:14 +00:00
rustc_traits Make TraitEngine::new use the right solver, add compare mode 2023-06-06 18:43:20 +00:00
rustc_transmute Remove unused TypeFoldable/TypeVisitable impls. 2023-04-26 15:19:50 +10:00
rustc_ty_utils Separate AnonConst from ConstBlock in HIR. 2023-06-02 21:25:18 +00:00
rustc_type_ir better TyKind::Debug 2023-05-26 18:55:02 +01:00