aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.4.3/gcc/testsuite/g++.dg/warn/Wself-assign-5.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.4.3/gcc/testsuite/g++.dg/warn/Wself-assign-5.C')
-rw-r--r--gcc-4.4.3/gcc/testsuite/g++.dg/warn/Wself-assign-5.C38
1 files changed, 38 insertions, 0 deletions
diff --git a/gcc-4.4.3/gcc/testsuite/g++.dg/warn/Wself-assign-5.C b/gcc-4.4.3/gcc/testsuite/g++.dg/warn/Wself-assign-5.C
new file mode 100644
index 000000000..20df214dd
--- /dev/null
+++ b/gcc-4.4.3/gcc/testsuite/g++.dg/warn/Wself-assign-5.C
@@ -0,0 +1,38 @@
+// Test -Wself-assign does not warn on self-assignment of non-POD variables.
+// { dg-do compile }
+// { dg-options "-Wself-assign" }
+
+template<typename T>
+class Foo {
+ private:
+ T a_;
+ public:
+ Foo() : a_(a_) {} // { dg-warning "assigned to itself" }
+ void Set() { a_ = a_; }
+};
+
+struct Bar {
+ int b_;
+ int c_;
+ void operator=(Bar& rhs) {
+ this->b_ = rhs.b_;
+ this->c_ = rhs.c_;
+ }
+};
+
+template <typename T>
+void func() {
+ T a;
+ a = a;
+}
+
+main()
+{
+ Foo<Bar> foo;
+ Bar *bar1, bar2;
+ func<int>();
+ foo = foo;
+ bar2 = bar2;
+ bar1 = bar1; // { dg-warning "assigned to itself" }
+ bar2.b_ = bar2.b_; // { dg-warning "assigned to itself" }
+}