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