annotate gcc/testsuite/g++.dg/pr85523.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* { dg-options "-fdiagnostics-show-caret" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 /* Verify that we emit a "return *this;" fix-it hint for
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 a missing return in an assignment operator. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 struct s1 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 s1& operator=(const s1&) { } // { dg-warning "no return statement in function returning non-void" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 s1& operator=(const s1&) { }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 ^
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 return *this;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 /* Likewise for +=. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 struct s2 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 s2& operator+=(const s2&) {} // { dg-warning "no return statement in function returning non-void" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 s2& operator+=(const s2&) {}
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 ^
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 return *this;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 /* No warning for "void" return. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 struct s3 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 void operator=(const s3&) { }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 /* We shouldn't issue the fix-it hint if the return type isn't right. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 struct s4 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 int operator=(int) { } // { dg-warning "no return statement in function returning non-void" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 int operator=(int) { }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 ^
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 /* Example of a multi-line fix-it hint. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 struct s5 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 int i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 s5& operator=(const s5& z) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 i = z.i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 } // { dg-warning "no return statement in function returning non-void" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 i = z.i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 + return *this;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 ^
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 /* Example of a multi-line fix-it hint with other statements. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 extern void log (const char *);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 struct s6 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 int i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 s6& operator=(const s6& z) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 log ("operator=\n");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 i = z.i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 } // { dg-warning "no return statement in function returning non-void" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 i = z.i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 + return *this;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 ^
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 /* Another example of a multi-line fix-it hint with other statements. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 struct s7 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 int i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 s7& operator=(const s6& z) {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 if (z.i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 log ("operator=\n");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 log ("operator=\n");
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 i = z.i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 } // { dg-warning "no return statement in function returning non-void" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 i = z.i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 + return *this;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 ^
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 };