rust/compiler
bors 3223b0b5e8 Auto merge of #115542 - saethlin:fileencoder-is-bufwriter, r=WaffleLapkin
Simplify/Optimize FileEncoder

FileEncoder is basically a BufWriter except that it exposes access to the not-written-to-yet region of the buffer so that some users can write directly to the buffer. This strategy is awesome because it lets us avoid calling memcpy for small copies, but the previous strategy was based on the writer accessing a `&mut [MaybeUninit<u8>; N]` and returning a `&[u8]` which is an API which currently mandates the use of unsafe code, making that interface in general not that appealing.

So this PR cleans up the FileEncoder implementation and builds on that general idea of direct buffer access in order to prevent `memcpy` calls in a few key places when encoding the dep graph and rmeta tables. The interface used here is now 100% safe, but with the caveat that internally we need to avoid trusting the number of bytes that the provided function claims to have written.

The original primary objective of this PR was to clean up the FileEncoder implementation so that the fix for the following issues would be easy to implement. The fix for these issues is to correctly update self.buffered even when writes fail, which I think it's easy to verify manually is now done, because all the FileEncoder methods are small.

Fixes https://github.com/rust-lang/rust/issues/115298
Fixes https://github.com/rust-lang/rust/issues/114671
Fixes https://github.com/rust-lang/rust/issues/114045
Fixes https://github.com/rust-lang/rust/issues/108100
Fixes https://github.com/rust-lang/rust/issues/106787
2023-09-20 21:47:54 +00:00
..
rustc inline format!() args up to and including rustc_middle 2023-07-30 13:18:33 +02:00
rustc_abi turns out Layout has some more things to worry about -- move ABI comparison into helper function 2023-09-08 09:14:07 +02:00
rustc_arena Bump cfg(bootstrap) 2023-08-23 20:05:14 -04:00
rustc_ast Auto merge of #114452 - weiznich:feature/diagnostic_on_unimplemented, r=compiler-errors 2023-09-17 10:00:15 +00:00
rustc_ast_lowering Auto merge of #113955 - cjgillot:name-apit, r=WaffleLapkin 2023-09-19 21:23:39 +00:00
rustc_ast_passes Move let expression checking to parsing 2023-09-11 15:51:18 +00:00
rustc_ast_pretty Move let expression checking to parsing 2023-09-11 15:51:18 +00:00
rustc_attr Auto merge of #114201 - Centri3:explicit-repr-rust, r=WaffleLapkin 2023-08-25 00:02:54 +00:00
rustc_baked_icu_data
rustc_borrowck Remove RegionHighlightMode::tcx. 2023-09-18 09:37:09 +10:00
rustc_builtin_macros Rollup merge of #115891 - RalfJung:structural-trait-derive, r=nnethercote 2023-09-18 18:27:20 +02:00
rustc_codegen_cranelift adjust constValue::Slice to work for arbitrary slice types 2023-09-19 20:17:43 +02:00
rustc_codegen_gcc fix gcc, cranelift build 2023-09-15 10:43:44 +02:00
rustc_codegen_llvm cannot have Direct for unsized types 2023-09-15 10:45:37 +02:00
rustc_codegen_ssa adjust constValue::Slice to work for arbitrary slice types 2023-09-19 20:17:43 +02:00
rustc_const_eval adjust constValue::Slice to work for arbitrary slice types 2023-09-19 20:17:43 +02:00
rustc_data_structures use pretty_print_const_value from MIR constant 'extra' printing 2023-09-19 11:06:32 +02:00
rustc_driver Update rustix 2023-07-03 07:20:51 +00:00
rustc_driver_impl Auto merge of #115627 - compiler-errors:icedump-no-std, r=m-ou-se 2023-09-19 16:56:25 +00:00
rustc_error_codes Auto merge of #115334 - RalfJung:transparent-aligned-zst, r=compiler-errors 2023-09-17 15:20:44 +00:00
rustc_error_messages Bump cfg(bootstrap) 2023-08-23 20:05:14 -04:00
rustc_errors implement -Z ignore-directory-in-diagnostics-source-blocks 2023-09-15 16:22:50 +02:00
rustc_expand Enable incremental-relative-spans by default. 2023-09-07 20:21:13 +00:00
rustc_feature Auto merge of #114452 - weiznich:feature/diagnostic_on_unimplemented, r=compiler-errors 2023-09-17 10:00:15 +00:00
rustc_fluent_macro
rustc_fs_util
rustc_graphviz
rustc_hir Auto merge of #113955 - cjgillot:name-apit, r=WaffleLapkin 2023-09-19 21:23:39 +00:00
rustc_hir_analysis Rollup merge of #115566 - zirconium-n:issue-107250-clean-up-unused-to-predicate, r=oli-obk 2023-09-20 17:33:16 +02:00
rustc_hir_pretty Auto merge of #114545 - fee1-dead-contrib:lower-impl-effect, r=oli-obk 2023-08-08 19:23:41 +00:00
rustc_hir_typeck Auto merge of #115289 - compiler-errors:adjust-comments, r=estebank 2023-09-19 03:52:48 +00:00
rustc_incremental Avoid a source_span query when encoding Spans into query results 2023-09-08 02:08:52 +02:00
rustc_index Auto merge of #115094 - Mark-Simulacrum:bootstrap-update, r=ozkanonur 2023-08-24 11:10:52 +00:00
rustc_infer Auto merge of #115748 - RalfJung:post-mono, r=oli-obk 2023-09-18 19:41:21 +00:00
rustc_interface Auto merge of #114750 - Enselic:metadata-dep-info, r=compiler-errors 2023-09-17 11:45:53 +00:00
rustc_lexer Update lexer emoji diagnostics to Unicode 15.0 2023-07-29 08:47:21 +08:00
rustc_lint Auto merge of #114494 - est31:extend_useless_ptr_null_checks, r=jackh726 2023-09-16 03:40:20 +00:00
rustc_lint_defs Auto merge of #114452 - weiznich:feature/diagnostic_on_unimplemented, r=compiler-errors 2023-09-17 10:00:15 +00:00
rustc_llvm llvm-wrapper: adapt for LLVM API changes 2023-09-15 14:31:43 +00:00
rustc_log inline format!() args up to and including rustc_middle 2023-07-30 13:18:33 +02:00
rustc_macros Bump cfg(bootstrap) 2023-08-23 20:05:14 -04:00
rustc_metadata Auto merge of #115542 - saethlin:fileencoder-is-bufwriter, r=WaffleLapkin 2023-09-20 21:47:54 +00:00
rustc_middle Auto merge of #115870 - RalfJung:const-value-slice, r=oli-obk 2023-09-20 18:06:48 +00:00
rustc_mir_build adjust constValue::Slice to work for arbitrary slice types 2023-09-19 20:17:43 +02:00
rustc_mir_dataflow Support non-scalar constants. 2023-09-11 16:29:41 +00:00
rustc_mir_transform coverage: Remove vestigial counter/expression debug labels 2023-09-20 17:24:10 +10:00
rustc_monomorphize adjust constValue::Slice to work for arbitrary slice types 2023-09-19 20:17:43 +02:00
rustc_parse Auto merge of #115677 - matthewjasper:let-expr-recovery, r=b-naber 2023-09-14 19:56:55 +00:00
rustc_parse_format Rollup merge of #115611 - lukas-code:format!("{r#ident}"), r=compiler-errors 2023-09-17 11:23:25 +00:00
rustc_passes Auto merge of #114452 - weiznich:feature/diagnostic_on_unimplemented, r=compiler-errors 2023-09-17 10:00:15 +00:00
rustc_plugin_impl
rustc_privacy Rollup merge of #115727 - fee1-dead-contrib:effect-fallback, r=oli-obk 2023-09-11 17:03:31 +02:00
rustc_query_impl Remove verbose_generic_activity_with_arg 2023-09-10 17:47:16 +02:00
rustc_query_system Auto merge of #115542 - saethlin:fileencoder-is-bufwriter, r=WaffleLapkin 2023-09-20 21:47:54 +00:00
rustc_resolve fix confusing let chain indentation in rustc_resolve 2023-09-19 21:21:01 +01:00
rustc_serialize PR feedback 2023-09-20 16:49:13 -04:00
rustc_session coverage: Remove debug code from the instrumentor 2023-09-20 17:24:10 +10:00
rustc_smir adjust constValue::Slice to work for arbitrary slice types 2023-09-19 20:17:43 +02:00
rustc_span Auto merge of #110800 - GuillaumeGomez:custom_code_classes_in_docs, r=t-rustdoc 2023-09-16 13:10:11 +00:00
rustc_symbol_mangling Auto merge of #115817 - fee1-dead-contrib:fix-codegen, r=oli-obk 2023-09-14 13:42:30 +00:00
rustc_target rustc_target/loongarch: Fix passing of transparent unions with only one non-ZST member 2023-09-20 09:22:02 +08:00
rustc_trait_selection remove impl<'tcx> ToPredicate<'tcx, Clause<'tcx>> for PolyProjectionPredicate<'tcx> 2023-09-20 04:03:02 +08:00
rustc_traits Detect cycle errors hidden by opaques during monomorphization 2023-09-13 17:35:44 +00:00
rustc_transmute make the eval() functions on our const types return the resulting value 2023-09-13 07:29:34 +02:00
rustc_ty_utils remove impl<'tcx> ToPredicate<'tcx, Clause<'tcx>> for PolyProjectionPredicate<'tcx> 2023-09-20 04:03:02 +08:00
rustc_type_ir make more pretty 2023-09-18 17:29:13 +01:00