forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			42 lines
		
	
	
		
			796 B
		
	
	
	
		
			TableGen
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			796 B
		
	
	
	
		
			TableGen
		
	
	
	
| // RUN: llvm-tblgen %s | FileCheck %s
 | |
| // XFAIL: vg_leak
 | |
| 
 | |
| // CHECK: WorldHelloCC
 | |
| // CHECK-NOT: WorldHelloCC
 | |
| 
 | |
| class C<string n> {
 | |
|   string name = n;
 | |
| }
 | |
| 
 | |
| multiclass Names<string n, string m> {
 | |
|    def CC : C<n>;
 | |
|    def World#NAME#CC : C<m>;
 | |
| }
 | |
| 
 | |
| defm Hello : Names<"hello", "world">;
 | |
| 
 | |
| // Ensure that the same anonymous name is used as the prefix for all defs in an
 | |
| // anonymous multiclass.
 | |
| 
 | |
| class Outer<C i> {
 | |
|   C Inner = i;
 | |
| }
 | |
| 
 | |
| multiclass MC<string name> {
 | |
|   def hi : C<name>;
 | |
|   def there : Outer<!cast<C>(!strconcat(NAME, "hi"))>;
 | |
| }
 | |
| 
 | |
| defm : MC<"foo">;
 | |
| 
 | |
| multiclass MC2<string name> {
 | |
|   def there : Outer<C<name> >;
 | |
| }
 | |
| 
 | |
| // Ensure that we've correctly captured the reference to name from the implicit
 | |
| // anonymous C def in the template parameter list of Outer.
 | |
| // CHECK-NOT: MC2::name
 | |
| 
 | |
| defm : MC2<"bar">;
 | |
| 
 |