Daily bump.
[gcc.git] / gcc / testsuite / g++.dg / pr85523.C
blob0ed16ff18cdd0437102bdc2f97a870105702ec3a
1 /* { dg-options "-fdiagnostics-show-caret" } */
3 /* Verify that we emit a "return *this;" fix-it hint for
4    a missing return in an assignment operator.  */
6 struct s1 {
7   s1& operator=(const s1&) { } // { dg-warning "no return statement in function returning non-void" }
8   /* { dg-begin-multiline-output "" }
9    s1& operator=(const s1&) { }
10                               ^
11                               return *this;
12      { dg-end-multiline-output "" } */
15 /* Likewise for +=.  */
17 struct s2 {
18   s2& operator+=(const s2&) {} // { dg-warning "no return statement in function returning non-void" }
19   /* { dg-begin-multiline-output "" }
20    s2& operator+=(const s2&) {}
21                               ^
22                               return *this;
23      { dg-end-multiline-output "" } */
26 /* No warning for "void" return.  */
28 struct s3 {
29   void operator=(const s3&) { }
32 /* We shouldn't issue the fix-it hint if the return type isn't right.  */
34 struct s4 {
35   int operator=(int) { } // { dg-warning "no return statement in function returning non-void" }
36   /* { dg-begin-multiline-output "" }
37    int operator=(int) { }
38                         ^
39      { dg-end-multiline-output "" } */
42 /* Example of a multi-line fix-it hint.  */
44 struct s5 {
45   int i;
46   s5& operator=(const s5& z) {
47     i = z.i;
48   } // { dg-warning "no return statement in function returning non-void" }
49   /* { dg-begin-multiline-output "" }
50      i = z.i;
51 +    return *this;
52    }
53    ^
54      { dg-end-multiline-output "" } */
57 /* Example of a multi-line fix-it hint with other statements.  */
59 extern void log (const char *);
60 struct s6 {
61   int i;
62   s6& operator=(const s6& z) {
63     log ("operator=\n");
64     i = z.i;
65   } // { dg-warning "no return statement in function returning non-void" }
66   /* { dg-begin-multiline-output "" }
67      i = z.i;
68 +    return *this;
69    }
70    ^
71      { dg-end-multiline-output "" } */
74 /* Another example of a multi-line fix-it hint with other statements.  */
76 struct s7 {
77   int i;
78   s7& operator=(const s6& z) {
79     if (z.i)
80       log ("operator=\n");
81     else
82       log ("operator=\n");
83     i = z.i;
84   } // { dg-warning "no return statement in function returning non-void" }
85   /* { dg-begin-multiline-output "" }
86      i = z.i;
87 +    return *this;
88    }
89    ^
90      { dg-end-multiline-output "" } */