Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 -verify -fsyntax-only -Wlarge-by-value-copy=100 %s
      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 
     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}}
     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>
     35 void tf(TS<size> ts) {} // expected-warning {{ts' is a large (300 bytes) pass-by-value argument}}
     36 
     37 void g() {
     38     TS<300> ts;
     39     tf<300>(ts); // expected-note {{instantiation}}
     40 }
     41 
     42 }
     43 
     44 template<typename T> class DependentPOD {
     45   enum b { x };
     46   b foo() { return x; }
     47 };
     48