forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			99 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify %s
 | |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
 | |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
 | |
| 
 | |
| namespace A { // expected-note 2 {{previous definition is here}}
 | |
|   int A;
 | |
|   void f() { A = 0; }
 | |
| }
 | |
| 
 | |
| void f() { A = 0; } // expected-error {{unexpected namespace name 'A': expected expression}}
 | |
| int A; // expected-error {{redefinition of 'A' as different kind of symbol}}
 | |
| class A; // expected-error {{redefinition of 'A' as different kind of symbol}}
 | |
| 
 | |
| class B {}; // expected-note {{previous definition is here}}
 | |
| // expected-note@-1 {{candidate function (the implicit copy assignment operator) not viable}}
 | |
| #if __cplusplus >= 201103L // C++11 or later
 | |
| // expected-note@-3 {{candidate function (the implicit move assignment operator) not viable}}
 | |
| #endif
 | |
| 
 | |
| void C(); // expected-note {{previous definition is here}}
 | |
| namespace C {} // expected-error {{redefinition of 'C' as different kind of symbol}}
 | |
| 
 | |
| namespace D {
 | |
|   class D {};
 | |
| }
 | |
| 
 | |
| namespace S1 {
 | |
|   int x;
 | |
| 
 | |
|   namespace S2 {
 | |
| 
 | |
|     namespace S3 {
 | |
|       B x;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| namespace S1 {
 | |
|   void f() {
 | |
|     x = 0;
 | |
|   }
 | |
| 
 | |
|   namespace S2 {
 | |
|     
 | |
|     namespace S3 {
 | |
|       void f() {
 | |
|         x = 0; // expected-error {{no viable overloaded '='}}
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     int y;
 | |
|   }
 | |
| }
 | |
| 
 | |
| namespace S1 {
 | |
|   namespace S2 {
 | |
|     namespace S3 {
 | |
|       void f3() {
 | |
|         y = 0;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| namespace B {} // expected-error {{redefinition of 'B' as different kind of symbol}}
 | |
| 
 | |
| 
 | |
| namespace foo {
 | |
|   enum x {
 | |
|     Y
 | |
|   };
 | |
| }
 | |
| 
 | |
| static foo::x  test1;  // ok
 | |
| 
 | |
| static foo::X  test2;  // typo: expected-error {{no type named 'X' in}}
 | |
| 
 | |
| namespace PR6620 {
 | |
|   namespace numeric {
 | |
|     namespace op {
 | |
|       struct greater {};
 | |
|     }
 | |
|     namespace {
 | |
|       extern op::greater const greater;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   namespace numeric {
 | |
|     namespace {
 | |
|       op::greater const greater = op::greater();
 | |
|     }
 | |
| 
 | |
|     template<typename T, typename U>
 | |
|     int f(T& l, U& r)
 | |
|     { numeric::greater(l, r); }
 | |
| 
 | |
|   }
 | |
| }
 |