blob: 3e419ec08f075ad992b164cbb06c8cd5a93a7025 [file] [log] [blame]
Argyrios Kyrtzidis1380a142010-11-18 00:20:36 +00001// RUN: %clang_cc1 -verify -fsyntax-only -Wlarge-by-value-copy=100 %s
Argyrios Kyrtzidis3532fdd2010-11-17 23:11:54 +00002
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
Argyrios Kyrtzidis1380a142010-11-18 00:20:36 +000016S101 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}}
Argyrios Kyrtzidis3532fdd2010-11-17 23:11:54 +000018
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>
Argyrios Kyrtzidis1380a142010-11-18 00:20:36 +000035void tf(TS<size> ts) {} // expected-warning {{ts' is a large (300 bytes) pass-by-value argument}}
Argyrios Kyrtzidis3532fdd2010-11-17 23:11:54 +000036
37void g() {
38 TS<300> ts;
39 tf<300>(ts); // expected-note {{instantiation}}
40}
41
42}
Eli Friedmand18840d2012-01-09 23:46:59 +000043
44template<typename T> class DependentPOD {
45 enum b { x };
46 b foo() { return x; }
47};