1 // RUN: %clang_cc1 -verify -fsyntax-only -Wlarge-by-value-copy=100 %s
3 namespace rdar8548050
{
13 S100
f100(S100 s
) { return s
; }
15 S101
f101(S101 s
) { return s
; } // expected-warning {{return value of 'f101' is a large (101 bytes) pass-by-value object}} \
16 // expected-warning {{'s' is a large (101 bytes) pass-by-value argument}}
18 void f101_no_param_name(S101
) {} // expected-warning {{'' is a large (101 bytes) pass-by-value argument}}
20 // FIXME: Don't warn when when the return value is subject to (N)RVO.
22 template <typename T
> T
foo_template(T
);
23 template <> S101
foo_template(S101
) { return S101(); } // expected-warning {{return value of 'foo_template<rdar8548050::S101>' is a large}}
24 // expected-warning@-1 {{'' is a large (101 bytes) pass-by-value argument}}
34 NonPOD
fNonPOD(NonPOD s
) { return s
; }
36 template <unsigned size
>
41 template <unsigned size
>
42 void tf(TS
<size
> ts
) {} // expected-warning {{ts' is a large (300 bytes) pass-by-value argument}}
46 tf
<300>(ts
); // expected-note {{instantiation}}
51 template<typename T
> class DependentPOD
{