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