annotate gcc/testsuite/g++.old-deja/g++.mike/p646.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-do assemble }
kono
parents:
diff changeset
2 // { dg-options "-Wno-deprecated -Wreturn-type" }
kono
parents:
diff changeset
3 // GROUPS passed i960
kono
parents:
diff changeset
4 /*
kono
parents:
diff changeset
5 Bug Id: bnr
kono
parents:
diff changeset
6 PMRS Id: p0000646
kono
parents:
diff changeset
7 Bug is: Urgent Code Generation Problem in gcc-i960 V 1.95
kono
parents:
diff changeset
8 */
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 extern "C"
kono
parents:
diff changeset
13 {
kono
parents:
diff changeset
14 int printf (const char *, ...);
kono
parents:
diff changeset
15 void abort ();
kono
parents:
diff changeset
16 }
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 struct foo
kono
parents:
diff changeset
19 {
kono
parents:
diff changeset
20 static int si;
kono
parents:
diff changeset
21 int i;
kono
parents:
diff changeset
22 foo ();
kono
parents:
diff changeset
23 foo (const foo&);
kono
parents:
diff changeset
24 ~foo ();
kono
parents:
diff changeset
25 };
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 int
kono
parents:
diff changeset
28 foo_parm_returns_i (foo foo_arg)
kono
parents:
diff changeset
29 {
kono
parents:
diff changeset
30 return foo_arg.i;
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 int foo::si = 0;
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 foo::foo ()
kono
parents:
diff changeset
36 {
kono
parents:
diff changeset
37 si++;
kono
parents:
diff changeset
38 printf ("new foo @ 0x%x; now %d foos\n", this, si);
kono
parents:
diff changeset
39 }
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 foo::foo (const foo &other)
kono
parents:
diff changeset
42 {
kono
parents:
diff changeset
43 si++;
kono
parents:
diff changeset
44 printf ("another foo @ 0x%x; now %d foos\n", this, si);
kono
parents:
diff changeset
45 *this = other;
kono
parents:
diff changeset
46 }
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 foo::~foo ()
kono
parents:
diff changeset
49 {
kono
parents:
diff changeset
50 si--;
kono
parents:
diff changeset
51 printf ("deleted foo @ 0x%x; now %d foos\n", this, si);
kono
parents:
diff changeset
52 }
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 int
kono
parents:
diff changeset
55 return_1 ()
kono
parents:
diff changeset
56 {
kono
parents:
diff changeset
57 foo f;
kono
parents:
diff changeset
58 printf ("returning 1\n");
kono
parents:
diff changeset
59 return 1;
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 int
kono
parents:
diff changeset
63 return_arg (int arg)
kono
parents:
diff changeset
64 {
kono
parents:
diff changeset
65 foo f;
kono
parents:
diff changeset
66 printf ("returning %d\n", arg);
kono
parents:
diff changeset
67 return arg;
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 int
kono
parents:
diff changeset
71 return_sum (int x, int y)
kono
parents:
diff changeset
72 {
kono
parents:
diff changeset
73 foo f;
kono
parents:
diff changeset
74 printf ("returning %d+%d\n", x, y);
kono
parents:
diff changeset
75 return x + y;
kono
parents:
diff changeset
76 }
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 foo
kono
parents:
diff changeset
79 return_foo ()
kono
parents:
diff changeset
80 {
kono
parents:
diff changeset
81 foo f;
kono
parents:
diff changeset
82 printf ("returning foo\n");
kono
parents:
diff changeset
83 return f;
kono
parents:
diff changeset
84 }
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 foo
kono
parents:
diff changeset
87 foo_parm_returns_foo (foo f)
kono
parents:
diff changeset
88 {
kono
parents:
diff changeset
89 return f;
kono
parents:
diff changeset
90 }
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 void
kono
parents:
diff changeset
93 abort_because (const char *str)
kono
parents:
diff changeset
94 {
kono
parents:
diff changeset
95 printf ("aborting because %s\n", str);
kono
parents:
diff changeset
96 abort ();
kono
parents:
diff changeset
97 }
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 int
kono
parents:
diff changeset
100 warn_return_1 ()
kono
parents:
diff changeset
101 {
kono
parents:
diff changeset
102 foo f;
kono
parents:
diff changeset
103 printf ("returning 1\n");
kono
parents:
diff changeset
104 } // { dg-warning "" } control reaches end
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 int
kono
parents:
diff changeset
107 warn_return_arg (int arg)
kono
parents:
diff changeset
108 {
kono
parents:
diff changeset
109 foo f;
kono
parents:
diff changeset
110 printf ("returning %d\n", arg);
kono
parents:
diff changeset
111 arg;
kono
parents:
diff changeset
112 } // { dg-warning "" } control reaches end
kono
parents:
diff changeset
113
kono
parents:
diff changeset
114 int
kono
parents:
diff changeset
115 warn_return_sum (int x, int y)
kono
parents:
diff changeset
116 {
kono
parents:
diff changeset
117 foo f;
kono
parents:
diff changeset
118 printf ("returning %d+%d\n", x, y);
kono
parents:
diff changeset
119 x + y;
kono
parents:
diff changeset
120 } // { dg-warning "" } control reaches end
kono
parents:
diff changeset
121
kono
parents:
diff changeset
122 foo
kono
parents:
diff changeset
123 warn_return_foo ()
kono
parents:
diff changeset
124 {
kono
parents:
diff changeset
125 foo f;
kono
parents:
diff changeset
126 printf ("returning foo\n");
kono
parents:
diff changeset
127 } // { dg-warning "" } control reaches end
kono
parents:
diff changeset
128
kono
parents:
diff changeset
129 foo
kono
parents:
diff changeset
130 warn_foo_parm_returns_foo (foo f)
kono
parents:
diff changeset
131 {
kono
parents:
diff changeset
132 f;
kono
parents:
diff changeset
133 } // { dg-warning "" } control reaches end
kono
parents:
diff changeset
134
kono
parents:
diff changeset
135 main () // { dg-warning "" } no type
kono
parents:
diff changeset
136 {
kono
parents:
diff changeset
137 int ii = return_1 ();
kono
parents:
diff changeset
138 if (ii != 1)
kono
parents:
diff changeset
139 abort_because ("wrong value returned");
kono
parents:
diff changeset
140 int j = return_arg (42);
kono
parents:
diff changeset
141 if (j != 42)
kono
parents:
diff changeset
142 abort_because ("wrong value returned");
kono
parents:
diff changeset
143 int k = return_sum (-69, 69);
kono
parents:
diff changeset
144 if (k != 0)
kono
parents:
diff changeset
145 abort_because ("wrong value returned");
kono
parents:
diff changeset
146 foo f1 = return_foo ();
kono
parents:
diff changeset
147 if (foo::si != 1)
kono
parents:
diff changeset
148 abort_because ("wrong number of foos");
kono
parents:
diff changeset
149 f1.i = 5;
kono
parents:
diff changeset
150 int l = foo_parm_returns_i (f1);
kono
parents:
diff changeset
151 if (l != 5)
kono
parents:
diff changeset
152 abort_because ("l != 5");
kono
parents:
diff changeset
153 foo f2 = foo_parm_returns_foo (f1);
kono
parents:
diff changeset
154 if (foo::si != 2)
kono
parents:
diff changeset
155 abort_because ("wrong number of foos");
kono
parents:
diff changeset
156 if (f2.i != 5)
kono
parents:
diff changeset
157 abort_because ("f2.i != 5");
kono
parents:
diff changeset
158 foo f3 = return_foo ();
kono
parents:
diff changeset
159 if (foo::si != 3)
kono
parents:
diff changeset
160 abort_because ("wrong number of foos");
kono
parents:
diff changeset
161 printf("PASS\n");
kono
parents:
diff changeset
162 return 0;
kono
parents:
diff changeset
163 }