1 // RUN: %clang_cc1 -verify -fsyntax-only -Wlarge-by-value-copy=100 %s
4 namespace rdar8548050
{
14 S100
f100(S100 s
) { return s
; }
16 S101
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}}
19 void f101_no_param_name(S101
) {} // expected-warning {{'' is a large (101 bytes) pass-by-value argument}}
21 // FIXME: Don't warn when when the return value is subject to (N)RVO.
23 template <typename T
> T
foo_template(T
);
24 template <> S101
foo_template(S101
) { return S101(); } // expected-warning {{return value of 'foo_template<rdar8548050::S101>' is a large}}
25 // expected-warning@-1 {{'' is a large (101 bytes) pass-by-value argument}}
35 NonPOD
fNonPOD(NonPOD s
) { return s
; }
37 template <unsigned size
>
42 template <unsigned size
>
43 void tf(TS
<size
> ts
) {} // expected-warning {{ts' is a large (300 bytes) pass-by-value argument}}
47 tf
<300>(ts
); // expected-note {{instantiation}}
52 template<typename T
> class DependentPOD
{