mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // compile-flags:-Zprint-mono-items=eager -Zpolymorphize=on -Zinline-mir=no
 | |
| 
 | |
| #![deny(dead_code)]
 | |
| #![feature(start)]
 | |
| 
 | |
| trait SomeTrait {
 | |
|     fn foo(&self) { }
 | |
|     fn bar<T>(&self, x: T) -> T { x }
 | |
| }
 | |
| 
 | |
| impl SomeTrait for i8 {
 | |
|     // take the default implementations
 | |
| 
 | |
|     // For the non-generic foo(), we should generate a codegen-item even if it
 | |
|     // is not called anywhere
 | |
|     //~ MONO_ITEM fn <i8 as SomeTrait>::foo
 | |
| }
 | |
| 
 | |
| trait SomeGenericTrait<T1> {
 | |
|     fn foo(&self) { }
 | |
|     fn bar<T2>(&self, x: T1, y: T2) {}
 | |
| }
 | |
| 
 | |
| // Non-generic impl of generic trait
 | |
| impl SomeGenericTrait<u64> for i32 {
 | |
|     // take the default implementations
 | |
| 
 | |
|     // For the non-generic foo(), we should generate a codegen-item even if it
 | |
|     // is not called anywhere
 | |
|     //~ MONO_ITEM fn <i32 as SomeGenericTrait<T1>>::foo
 | |
| }
 | |
| 
 | |
| // Non-generic impl of generic trait
 | |
| impl<T1> SomeGenericTrait<T1> for u32 {
 | |
|     // take the default implementations
 | |
|     // since nothing is monomorphic here, nothing should be generated unless used somewhere.
 | |
| }
 | |
| 
 | |
| //~ MONO_ITEM fn start
 | |
| #[start]
 | |
| fn start(_: isize, _: *const *const u8) -> isize {
 | |
|     //~ MONO_ITEM fn <i8 as SomeTrait>::bar::<char>
 | |
|     let _ = 1i8.bar('c');
 | |
| 
 | |
|     //~ MONO_ITEM fn <i8 as SomeTrait>::bar::<&str>
 | |
|     let _ = 2i8.bar("&str");
 | |
| 
 | |
|     //~ MONO_ITEM fn <i32 as SomeGenericTrait<u64>>::bar::<char>
 | |
|     0i32.bar(0u64, 'c');
 | |
| 
 | |
|     //~ MONO_ITEM fn <i32 as SomeGenericTrait<u64>>::bar::<&str>
 | |
|     0i32.bar(0u64, "&str");
 | |
| 
 | |
|     //~ MONO_ITEM fn <u32 as SomeGenericTrait<i8>>::bar::<&[char; 1]>
 | |
|     0u32.bar(0i8, &['c']);
 | |
| 
 | |
|     //~ MONO_ITEM fn <u32 as SomeGenericTrait<i16>>::bar::<()>
 | |
|     0u32.bar(0i16, ());
 | |
| 
 | |
|     0
 | |
| }
 | 
