aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/vect
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/vect')
-rw-r--r--gcc/testsuite/g++.dg/vect/pr21734_1.cc20
-rw-r--r--gcc/testsuite/g++.dg/vect/pr21734_2.cc16
2 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/vect/pr21734_1.cc b/gcc/testsuite/g++.dg/vect/pr21734_1.cc
new file mode 100644
index 00000000000..c65d9fcaa81
--- /dev/null
+++ b/gcc/testsuite/g++.dg/vect/pr21734_1.cc
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+
+struct A
+{
+ int a[4];
+ int& operator[](int i) { return a[i]; }
+};
+
+struct B : public A
+{
+ int& operator[](int i) { return A::operator[](i); }
+};
+
+void foo(B &b)
+{
+ for (int i=0; i<4; ++i)
+ b[i] = 0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/g++.dg/vect/pr21734_2.cc b/gcc/testsuite/g++.dg/vect/pr21734_2.cc
new file mode 100644
index 00000000000..58efedf18f3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/vect/pr21734_2.cc
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+
+struct A
+{
+ int a[4];
+ int* operator[](int i) { return &a[i]; }
+};
+
+void foo(A a1, A &a2)
+{
+ a1[1][1]=0;
+ for (int i=0; i<4; ++i)
+ a2.a[i]=0;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */