forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			41 lines
		
	
	
		
			886 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			886 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -fmodules -verify -fno-modules-error-recovery -fno-spell-checking %s
 | |
| // RUN: %clang_cc1 -fmodules -verify -fno-modules-error-recovery -DONLY_Y %s
 | |
| 
 | |
| #pragma clang module build a
 | |
| module a {
 | |
|   explicit module x {}
 | |
|   explicit module y {}
 | |
| }
 | |
| #pragma clang module contents
 | |
| #pragma clang module begin a.x
 | |
| namespace N {
 | |
|   template<typename T> extern int f(T) { return 0; }
 | |
| }
 | |
| #pragma clang module end
 | |
| 
 | |
| #pragma clang module begin a.y
 | |
| #pragma clang module import a.x
 | |
| using N::f;
 | |
| #pragma clang module end
 | |
| #pragma clang module endbuild
 | |
| 
 | |
| namespace N { struct A {}; }
 | |
| struct B {};
 | |
| 
 | |
| #ifndef ONLY_Y
 | |
| #pragma clang module import a.x
 | |
| void test1() {
 | |
|   f(N::A());
 | |
|   f(B()); // expected-error {{use of undeclared identifier 'f'}}
 | |
| }
 | |
| #else
 | |
| // expected-no-diagnostics
 | |
| #endif
 | |
| 
 | |
| #pragma clang module import a.y
 | |
| void test2() {
 | |
|   // These are OK even if a.x is not imported.
 | |
|   f(N::A());
 | |
|   f(B());
 | |
| }
 |