// 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; } };