forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			48 lines
		
	
	
		
			941 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			941 B
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -verify -fsyntax-only -Wlarge-by-value-copy=100 %s
 | 
						|
 | 
						|
// rdar://8548050
 | 
						|
namespace rdar8548050 {
 | 
						|
 | 
						|
struct S100 {
 | 
						|
    char x[100];
 | 
						|
};
 | 
						|
 | 
						|
struct S101 {
 | 
						|
    char x[101];
 | 
						|
};
 | 
						|
 | 
						|
S100 f100(S100 s) { return s; }
 | 
						|
 | 
						|
S101 f101(S101 s) { return s; } // expected-warning {{return value of 'f101' is a large (101 bytes) pass-by-value object}} \
 | 
						|
                                // expected-warning {{'s' is a large (101 bytes) pass-by-value argument}}
 | 
						|
 | 
						|
typedef int Arr[200];
 | 
						|
void farr(Arr a) { }
 | 
						|
 | 
						|
struct NonPOD {
 | 
						|
  char x[200];
 | 
						|
  virtual void m();
 | 
						|
};
 | 
						|
 | 
						|
NonPOD fNonPOD(NonPOD s) { return s; }
 | 
						|
 | 
						|
template <unsigned size>
 | 
						|
struct TS {
 | 
						|
    char x[size];
 | 
						|
};
 | 
						|
 | 
						|
template <unsigned size>
 | 
						|
void tf(TS<size> ts) {} // expected-warning {{ts' is a large (300 bytes) pass-by-value argument}}
 | 
						|
 | 
						|
void g() {
 | 
						|
    TS<300> ts;
 | 
						|
    tf<300>(ts); // expected-note {{instantiation}}
 | 
						|
}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
template<typename T> class DependentPOD {
 | 
						|
  enum b { x };
 | 
						|
  b foo() { return x; }
 | 
						|
};
 |