summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/warn/Wshadow-6.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/warn/Wshadow-6.C')
-rw-r--r--gcc/testsuite/g++.dg/warn/Wshadow-6.C39
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/warn/Wshadow-6.C b/gcc/testsuite/g++.dg/warn/Wshadow-6.C
new file mode 100644
index 000000000..9b13e3ae7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wshadow-6.C
@@ -0,0 +1,39 @@
+// Test the declaration of nested lambda function shadows
+// a parameter or previous local.
+// { dg-do compile }
+// { dg-options "-std=c++0x -Wshadow" }
+
+struct S {};
+int f1(int x) // { dg-warning "shadowed declaration" }
+{
+ int t = 0;
+ int m = 0; // { dg-warning "shadowed declaration" }
+ [&t] (int x) { // { dg-warning "shadows a parameter" }
+ int m = 1; // { dg-warning "shadows a previous local" }
+ t = t + x + m;
+ };
+ return t;
+}
+
+void f2(struct S i, int j) {
+ struct A {
+ struct S x;
+ void g(struct S i) { // { dg-warning "shadowed declaration" }
+ struct S x; // { dg-warning "shadows a member of" }
+ struct S y; // { dg-warning "shadowed declaration" }
+ int t;
+ [&t](struct S i){ // { dg-warning "shadows a parameter" }
+ int j = 1; // { dg-bogus "shadows" }
+ struct S y; // { dg-warning "shadows a previous local" }
+ t = j;
+ };
+ }
+ };
+}
+
+void f3(int i) {
+ [=]{
+ int j = i;
+ int i; // { dg-warning "shadows a member of" }
+ };
+}