forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			39 lines
		
	
	
		
			982 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			982 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
 | |
| 
 | |
| struct S {
 | |
|   int *j = &nonexistent; // expected-error {{use of undeclared identifier 'nonexistent'}}
 | |
|   int *m = &n; // ok
 | |
| 
 | |
|   int n = f(); // ok
 | |
|   int f();
 | |
| };
 | |
| 
 | |
| int i = sizeof(S::m); // ok
 | |
| int j = sizeof(S::m + 42); // ok
 | |
| 
 | |
| 
 | |
| struct T {
 | |
|   int n;
 | |
|   static void f() {
 | |
|     int a[n]; // expected-error {{invalid use of member 'n' in static member function}}
 | |
|     int b[sizeof n]; // ok
 | |
|   }
 | |
| };
 | |
| 
 | |
| // Make sure the rule for unevaluated operands works correctly with typeid.
 | |
| namespace std {
 | |
|   class type_info;
 | |
| }
 | |
| class Poly { virtual ~Poly(); };
 | |
| const std::type_info& k = typeid(S::m);
 | |
| const std::type_info& m = typeid(*(Poly*)S::m); // expected-error {{invalid use of non-static data member}}
 | |
| const std::type_info& n = typeid(*(Poly*)(0*sizeof S::m)); 
 | |
| 
 | |
| namespace PR11956 {
 | |
|   struct X { char a; };
 | |
|   struct Y { int f() { return sizeof(X::a); } }; // ok
 | |
| 
 | |
|   struct A { enum E {} E; };
 | |
|   struct B { int f() { return sizeof(A::E); } }; // ok
 | |
| }
 |