summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/warn-large-by-value-copy.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-11-18 00:20:36 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-11-18 00:20:36 +0000
commitef6c8da50fac204fe9dca3061cd17ac383504974 (patch)
treee37e2d4d17f6b53f036923e632e49b95ae811456 /clang/test/SemaCXX/warn-large-by-value-copy.cpp
parent64aaddcd64e04d7f1e0324e454915640925ef405 (diff)
downloadbcm5719-llvm-ef6c8da50fac204fe9dca3061cd17ac383504974.tar.gz
bcm5719-llvm-ef6c8da50fac204fe9dca3061cd17ac383504974.zip
-Rename -Wargument-larger-than -> -Wlarge-by-value-copy
-Improve the diagnostic message -Add some comments Suggestions by Chris. llvm-svn: 119594
Diffstat (limited to 'clang/test/SemaCXX/warn-large-by-value-copy.cpp')
-rw-r--r--clang/test/SemaCXX/warn-large-by-value-copy.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/warn-large-by-value-copy.cpp b/clang/test/SemaCXX/warn-large-by-value-copy.cpp
new file mode 100644
index 00000000000..39dbd7697d2
--- /dev/null
+++ b/clang/test/SemaCXX/warn-large-by-value-copy.cpp
@@ -0,0 +1,42 @@
+// 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}}
+}
+
+}
OpenPOWER on IntegriCloud