1// RUN: %clang_cc1 -verify -fsyntax-only -Wlarge-by-value-copy=100 %s 2 3// rdar://8548050 4namespace rdar8548050 { 5 6struct S100 { 7 char x[100]; 8}; 9 10struct S101 { 11 char x[101]; 12}; 13 14S100 f100(S100 s) { return s; } 15 16S101 f101(S101 s) { return s; } // expected-warning {{return value of 'f101' is a large (101 bytes) pass-by-value object}} \ 17 // expected-warning {{'s' is a large (101 bytes) pass-by-value argument}} 18 19typedef int Arr[200]; 20void farr(Arr a) { } 21 22struct NonPOD { 23 char x[200]; 24 virtual void m(); 25}; 26 27NonPOD fNonPOD(NonPOD s) { return s; } 28 29template <unsigned size> 30struct TS { 31 char x[size]; 32}; 33 34template <unsigned size> 35void tf(TS<size> ts) {} // expected-warning {{ts' is a large (300 bytes) pass-by-value argument}} 36 37void g() { 38 TS<300> ts; 39 tf<300>(ts); // expected-note {{instantiation}} 40} 41 42} 43 44template<typename T> class DependentPOD { 45 enum b { x }; 46 b foo() { return x; } 47}; 48