11380a147d4578b619c215b23aa79ce17036d3c46Argyrios Kyrtzidis// RUN: %clang_cc1 -verify -fsyntax-only -Wlarge-by-value-copy=100 %s 23532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 33532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis// rdar://8548050 43532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidisnamespace rdar8548050 { 53532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 63532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidisstruct S100 { 73532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis char x[100]; 83532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis}; 93532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 103532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidisstruct S101 { 113532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis char x[101]; 123532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis}; 133532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 143532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios KyrtzidisS100 f100(S100 s) { return s; } 153532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 161380a147d4578b619c215b23aa79ce17036d3c46Argyrios KyrtzidisS101 f101(S101 s) { return s; } // expected-warning {{return value of 'f101' is a large (101 bytes) pass-by-value object}} \ 171380a147d4578b619c215b23aa79ce17036d3c46Argyrios Kyrtzidis // expected-warning {{'s' is a large (101 bytes) pass-by-value argument}} 183532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 193532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidistypedef int Arr[200]; 203532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidisvoid farr(Arr a) { } 213532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 223532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidisstruct NonPOD { 233532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis char x[200]; 243532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis virtual void m(); 253532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis}; 263532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 273532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios KyrtzidisNonPOD fNonPOD(NonPOD s) { return s; } 283532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 293532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidistemplate <unsigned size> 303532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidisstruct TS { 313532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis char x[size]; 323532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis}; 333532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 343532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidistemplate <unsigned size> 351380a147d4578b619c215b23aa79ce17036d3c46Argyrios Kyrtzidisvoid tf(TS<size> ts) {} // expected-warning {{ts' is a large (300 bytes) pass-by-value argument}} 363532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 373532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidisvoid g() { 383532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis TS<300> ts; 393532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis tf<300>(ts); // expected-note {{instantiation}} 403532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis} 413532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis 423532fdd1db8ff6f353f2a5b215cebe3e0e2ff3c2Argyrios Kyrtzidis} 43d18840d1e27c1b9c27bb74923b87f8ae33ec4736Eli Friedman 44d18840d1e27c1b9c27bb74923b87f8ae33ec4736Eli Friedmantemplate<typename T> class DependentPOD { 45d18840d1e27c1b9c27bb74923b87f8ae33ec4736Eli Friedman enum b { x }; 46d18840d1e27c1b9c27bb74923b87f8ae33ec4736Eli Friedman b foo() { return x; } 47d18840d1e27c1b9c27bb74923b87f8ae33ec4736Eli Friedman}; 48