mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	cache types during normalization partially fixes #75992 reduces the following test from 14 to 3 seconds locally. cc `@Mark-Simulacrum` would it make sense to add that test to `perf`? ```rust #![recursion_limit="2048"] #![type_length_limit="112457564"] pub async fn h0(v: &String, x: &u64) { println!("{} {}", v, x) } pub async fn h1(v: &String, x: &u64) { h0(v, x).await } pub async fn h2(v: &String, x: &u64) { h1(v, x).await } pub async fn h3(v: &String, x: &u64) { h2(v, x).await } pub async fn h4(v: &String, x: &u64) { h3(v, x).await } pub async fn h5(v: &String, x: &u64) { h4(v, x).await } pub async fn h6(v: &String, x: &u64) { h5(v, x).await } pub async fn h7(v: &String, x: &u64) { h6(v, x).await } pub async fn h8(v: &String, x: &u64) { h7(v, x).await } pub async fn h9(v: &String, x: &u64) { h8(v, x).await } pub async fn h10(v: &String, x: &u64) { h9(v, x).await } pub async fn h11(v: &String, x: &u64) { h10(v, x).await } pub async fn h12(v: &String, x: &u64) { h11(v, x).await } pub async fn h13(v: &String, x: &u64) { h12(v, x).await } pub async fn h14(v: &String, x: &u64) { h13(v, x).await } pub async fn h15(v: &String, x: &u64) { h14(v, x).await } pub async fn h16(v: &String, x: &u64) { h15(v, x).await } pub async fn h17(v: &String, x: &u64) { h16(v, x).await } pub async fn h18(v: &String, x: &u64) { h17(v, x).await } pub async fn h19(v: &String, x: &u64) { h18(v, x).await } macro_rules! async_recursive { (29, $inner:expr) => { async { async_recursive!(28, $inner) }.await }; (28, $inner:expr) => { async { async_recursive!(27, $inner) }.await }; (27, $inner:expr) => { async { async_recursive!(26, $inner) }.await }; (26, $inner:expr) => { async { async_recursive!(25, $inner) }.await }; (25, $inner:expr) => { async { async_recursive!(24, $inner) }.await }; (24, $inner:expr) => { async { async_recursive!(23, $inner) }.await }; (23, $inner:expr) => { async { async_recursive!(22, $inner) }.await }; (22, $inner:expr) => { async { async_recursive!(21, $inner) }.await }; (21, $inner:expr) => { async { async_recursive!(20, $inner) }.await }; (20, $inner:expr) => { async { async_recursive!(19, $inner) }.await }; (19, $inner:expr) => { async { async_recursive!(18, $inner) }.await }; (18, $inner:expr) => { async { async_recursive!(17, $inner) }.await }; (17, $inner:expr) => { async { async_recursive!(16, $inner) }.await }; (16, $inner:expr) => { async { async_recursive!(15, $inner) }.await }; (15, $inner:expr) => { async { async_recursive!(14, $inner) }.await }; (14, $inner:expr) => { async { async_recursive!(13, $inner) }.await }; (13, $inner:expr) => { async { async_recursive!(12, $inner) }.await }; (12, $inner:expr) => { async { async_recursive!(11, $inner) }.await }; (11, $inner:expr) => { async { async_recursive!(10, $inner) }.await }; (10, $inner:expr) => { async { async_recursive!(9, $inner) }.await }; (9, $inner:expr) => { async { async_recursive!(8, $inner) }.await }; (8, $inner:expr) => { async { async_recursive!(7, $inner) }.await }; (7, $inner:expr) => { async { async_recursive!(6, $inner) }.await }; (6, $inner:expr) => { async { async_recursive!(5, $inner) }.await }; (5, $inner:expr) => { async { async_recursive!(4, $inner) }.await }; (4, $inner:expr) => { async { async_recursive!(3, $inner) }.await }; (3, $inner:expr) => { async { async_recursive!(2, $inner) }.await }; (2, $inner:expr) => { async { async_recursive!(1, $inner) }.await }; (1, $inner:expr) => { async { async_recursive!(0, $inner) }.await }; (0, $inner:expr) => { async { h19(&String::from("owo"), &0).await; $inner }.await }; } async fn f() { async_recursive!(14, println!("hello")); } fn main() { let _ = f(); } ``` r? `@eddyb` requires a perf run.
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TOML
		
	
	
	
	
	
[package]
 | 
						|
authors = ["The Rust Project Developers"]
 | 
						|
name = "rustc_data_structures"
 | 
						|
version = "0.0.0"
 | 
						|
edition = "2018"
 | 
						|
 | 
						|
[lib]
 | 
						|
doctest = false
 | 
						|
 | 
						|
[dependencies]
 | 
						|
arrayvec = { version = "0.5.1", default-features = false }
 | 
						|
ena = "0.14"
 | 
						|
indexmap = "1.5.1"
 | 
						|
tracing = "0.1"
 | 
						|
jobserver_crate = { version = "0.1.13", package = "jobserver" }
 | 
						|
rustc_serialize = { path = "../rustc_serialize" }
 | 
						|
rustc_macros = { path = "../rustc_macros" }
 | 
						|
rustc_graphviz = { path = "../rustc_graphviz" }
 | 
						|
cfg-if = "0.1.2"
 | 
						|
crossbeam-utils = { version = "0.7", features = ["nightly"] }
 | 
						|
stable_deref_trait = "1.0.0"
 | 
						|
rayon = { version = "0.3.0", package = "rustc-rayon" }
 | 
						|
rayon-core = { version = "0.3.0", package = "rustc-rayon-core" }
 | 
						|
rustc-hash = "1.1.0"
 | 
						|
smallvec = { version = "1.0", features = ["union", "may_dangle"] }
 | 
						|
rustc_index = { path = "../rustc_index", package = "rustc_index" }
 | 
						|
bitflags = "1.2.1"
 | 
						|
measureme = "0.7.1"
 | 
						|
libc = "0.2"
 | 
						|
stacker = "0.1.12"
 | 
						|
tempfile = "3.0.5"
 | 
						|
 | 
						|
[dependencies.parking_lot]
 | 
						|
version = "0.11"
 | 
						|
features = ["nightly"]
 | 
						|
 | 
						|
[target.'cfg(windows)'.dependencies]
 | 
						|
winapi = { version = "0.3", features = ["fileapi", "psapi"] }
 |