rust/compiler
Dylan DPC 555db2da70
Rollup merge of #82248 - nhwn:optimize-counting-digits, r=varkor
Optimize counting digits in line numbers during error reporting

Replaces `.to_string().len()` with simple loop and integer division, which avoids an unnecessary allocation.

Although I couldn't figure out how to directly profile `rustc`'s error reporting, I ran a microbenchmark on my machine (2.9 GHz Dual-Core Intel Core i5) on the two strategies for `0..100_000`, and the results seem promising:
```
test to_string_len ... bench:  12,124,792 ns/iter (+/- 700,652)
test while_loop    ... bench:      30,333 ns/iter (+/- 562)
```
The x86_64 disassembly reduces integer division to a multiplication + shift, so I don't think there's any problems with using integer division.

For more (micro)optimization, it would be nice if we could avoid the initial check to see if the line number is nonzero, but I don't think `self.get_max_line_num(span, children)` _guarantees_ a nonzero line number.
2021-02-18 16:57:42 +01:00
..
rustc
rustc_apfloat bumped smallvec deps 2021-02-14 18:03:11 +03:00
rustc_arena Rollup merge of #82077 - pierwill:edit-droparena, r=lcnr 2021-02-15 16:07:00 +01:00
rustc_ast Auto merge of #82103 - Dylan-DPC:rollup-5wv8rid, r=Dylan-DPC 2021-02-14 22:26:21 +00:00
rustc_ast_lowering Auto merge of #81611 - cjgillot:meowner, r=estebank 2021-02-16 22:14:32 +00:00
rustc_ast_passes Auto merge of #81346 - hug-dev:nonsecure-call-abi, r=jonas-schievink 2021-02-03 06:00:43 +00:00
rustc_ast_pretty Rollup merge of #82066 - matthewjasper:trait-ref-fix, r=jackh726 2021-02-18 16:57:34 +01:00
rustc_attr Never MIR inline functions with a different instruction set 2021-02-05 00:00:00 +00:00
rustc_builtin_macros avoid full-slicing slices 2021-02-16 00:31:11 +01:00
rustc_codegen_cranelift Use an ItemId inside mir::GlobalAsm. 2021-02-15 19:24:58 +01:00
rustc_codegen_llvm Rollup merge of #82105 - nagisa:nagisa/ensure-removed, r=petrochenkov 2021-02-17 20:37:57 +01:00
rustc_codegen_ssa Rollup merge of #81898 - nanguye2496:nanguye2496/fix_str_and_slice_visualization, r=varkor 2021-02-17 23:51:17 +01:00
rustc_data_structures Auto merge of #81855 - cjgillot:ensure-cache, r=oli-obk 2021-02-15 12:11:59 +00:00
rustc_driver Rollup merge of #82174 - est31:master, r=oli-obk 2021-02-17 20:38:01 +01:00
rustc_error_codes Rollup merge of #82246 - jesusprubio:add-long-explanation-e0549, r=GuillaumeGomez 2021-02-18 16:57:41 +01:00
rustc_errors nhwn: optimize counting digits in line numbers 2021-02-18 08:20:07 -06:00
rustc_expand Rollup merge of #81869 - mark-i-m:leading-vert, r=petrochenkov 2021-02-17 23:51:16 +01:00
rustc_feature Feature gate macro attributes in #[derive] output 2021-02-07 20:08:45 +03:00
rustc_fs_util Optimize away a fs::metadata call. 2021-01-06 08:33:15 -08:00
rustc_graphviz remove redundant closures (clippy::redundant_closure) 2021-01-03 13:34:24 +01:00
rustc_hir Rollup merge of #82066 - matthewjasper:trait-ref-fix, r=jackh726 2021-02-18 16:57:34 +01:00
rustc_hir_pretty Auto merge of #81611 - cjgillot:meowner, r=estebank 2021-02-16 22:14:32 +00:00
rustc_incremental Use less HirId when referring to items. 2021-02-15 19:36:12 +01:00
rustc_index Auto merge of #81498 - thomaseizinger:ice-workaround-56935-rustc-index, r=matthewjasper 2021-02-07 08:09:58 +00:00
rustc_infer Rollup merge of #82066 - matthewjasper:trait-ref-fix, r=jackh726 2021-02-18 16:57:34 +01:00
rustc_interface Index Modules using their LocalDefId. 2021-02-15 19:32:30 +01:00
rustc_lexer Return EOF_CHAR constant instead of magic char. 2021-01-07 13:20:04 +01:00
rustc_lint Rollup merge of #79981 - camelid:overflowing_literals-inference-error, r=lcnr 2021-02-17 20:37:48 +01:00
rustc_lint_defs replace if-let and while-let with if let and while let 2021-02-17 19:26:38 +09:00
rustc_llvm HWASan support 2021-02-07 23:48:58 -08:00
rustc_macros Switch query descriptions to just String 2021-02-08 17:20:41 -05:00
rustc_metadata Auto merge of #81611 - cjgillot:meowner, r=estebank 2021-02-16 22:14:32 +00:00
rustc_middle Rollup merge of #82194 - estebank:arbitrary-bounds-suggestion, r=petrochenkov 2021-02-18 16:57:36 +01:00
rustc_mir Rollup merge of #82240 - matthiaskrgr:qmark, r=Dylan-DPC 2021-02-18 15:57:33 +09:00
rustc_mir_build Rollup merge of #82215 - TaKO8Ki:replace-if-let-while-let, r=varkor 2021-02-18 16:57:37 +01:00
rustc_parse Rollup merge of #82236 - matthiaskrgr:useless_conv, r=jyn514 2021-02-18 16:57:40 +01:00
rustc_parse_format parse_format: treat r" as a literal 2021-02-06 15:01:07 +00:00
rustc_passes replace if-let and while-let with if let and while let 2021-02-17 19:26:38 +09:00
rustc_plugin_impl Only store a LocalDefId in hir::Item. 2021-02-15 19:32:10 +01:00
rustc_privacy Rollup merge of #82066 - matthewjasper:trait-ref-fix, r=jackh726 2021-02-18 16:57:34 +01:00
rustc_query_system Inline try_get_cached 2021-02-16 00:00:00 +00:00
rustc_resolve Auto merge of #81611 - cjgillot:meowner, r=estebank 2021-02-16 22:14:32 +00:00
rustc_save_analysis Only store a LocalDefId in hir::ForeignItem. 2021-02-15 19:32:29 +01:00
rustc_serialize bumped smallvec deps 2021-02-14 18:03:11 +03:00
rustc_session rustdoc: treat edition 2021 as unstable 2021-02-16 19:17:01 -08:00
rustc_span Auto merge of #81172 - SimonSapin:ptr-metadata, r=oli-obk 2021-02-18 04:22:16 +00:00
rustc_symbol_mangling Use less HirId when referring to items. 2021-02-15 19:36:12 +01:00
rustc_target add specs for riscv32/riscv64 musl targets 2021-02-16 16:34:32 -08:00
rustc_trait_selection Rollup merge of #82194 - estebank:arbitrary-bounds-suggestion, r=petrochenkov 2021-02-18 16:57:36 +01:00
rustc_traits Rollup merge of #82066 - matthewjasper:trait-ref-fix, r=jackh726 2021-02-18 16:57:34 +01:00
rustc_ty_utils Auto merge of #81172 - SimonSapin:ptr-metadata, r=oli-obk 2021-02-18 04:22:16 +00:00
rustc_type_ir Move a few more types to rustc_type_ir 2021-01-18 21:06:12 +01:00
rustc_typeck Rollup merge of #82236 - matthiaskrgr:useless_conv, r=jyn514 2021-02-18 16:57:40 +01:00