Argyrios Kyrtzidis | 1380a14 | 2010-11-18 00:20:36 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -verify -fsyntax-only -Wlarge-by-value-copy=100 %s |
Argyrios Kyrtzidis | 3532fdd | 2010-11-17 23:11:54 +0000 | [diff] [blame] | 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 | |
| 14 | S100 f100(S100 s) { return s; } |
| 15 | |
Argyrios Kyrtzidis | 1380a14 | 2010-11-18 00:20:36 +0000 | [diff] [blame] | 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}} |
Argyrios Kyrtzidis | 3532fdd | 2010-11-17 23:11:54 +0000 | [diff] [blame] | 18 | |
| 19 | typedef int Arr[200]; |
| 20 | void farr(Arr a) { } |
| 21 | |
| 22 | struct NonPOD { |
| 23 | char x[200]; |
| 24 | virtual void m(); |
| 25 | }; |
| 26 | |
| 27 | NonPOD fNonPOD(NonPOD s) { return s; } |
| 28 | |
| 29 | template <unsigned size> |
| 30 | struct TS { |
| 31 | char x[size]; |
| 32 | }; |
| 33 | |
| 34 | template <unsigned size> |
Argyrios Kyrtzidis | 1380a14 | 2010-11-18 00:20:36 +0000 | [diff] [blame] | 35 | void tf(TS<size> ts) {} // expected-warning {{ts' is a large (300 bytes) pass-by-value argument}} |
Argyrios Kyrtzidis | 3532fdd | 2010-11-17 23:11:54 +0000 | [diff] [blame] | 36 | |
| 37 | void g() { |
| 38 | TS<300> ts; |
| 39 | tf<300>(ts); // expected-note {{instantiation}} |
| 40 | } |
| 41 | |
| 42 | } |
Eli Friedman | d18840d | 2012-01-09 23:46:59 +0000 | [diff] [blame] | 43 | |
| 44 | template<typename T> class DependentPOD { |
| 45 | enum b { x }; |
| 46 | b foo() { return x; } |
| 47 | }; |