decl.c (create_array_type_for_decl): Add location_t parameter and use it.
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.mike / p646.C
blob4f7807d11604acbb6b49257efb63274f996b8d86
1 // { dg-do assemble  }
2 // { dg-options "-Wno-deprecated -Wreturn-type" }
3 // GROUPS passed i960
4 /*
5   Bug Id: bnr
6   PMRS Id: p0000646
7   Bug is: Urgent Code Generation Problem in gcc-i960 V 1.95
8 */
12 extern "C"
14   int printf (const char *, ...);
15   void abort ();
18 struct foo
20   static int si;
21   int i;
22   foo ();
23   foo (const foo&);
24   ~foo ();
27 int
28 foo_parm_returns_i (foo foo_arg)
30   return foo_arg.i;
33 int foo::si = 0;
35 foo::foo ()
37   si++;
38   printf ("new foo @ 0x%x; now %d foos\n", this, si);
41 foo::foo (const foo &other)
43   si++;
44   printf ("another foo @ 0x%x; now %d foos\n", this, si);
45   *this = other;
48 foo::~foo ()
50   si--;
51   printf ("deleted foo @ 0x%x; now %d foos\n", this, si);
54 int
55 return_1 ()
57   foo f;
58   printf ("returning 1\n");
59   return 1;
62 int
63 return_arg (int arg)
65   foo f;
66   printf ("returning %d\n", arg);
67   return arg;
70 int
71 return_sum (int x, int y)
73   foo f;
74   printf ("returning %d+%d\n", x, y);
75   return x + y;
78 foo
79 return_foo ()
81   foo f;
82   printf ("returning foo\n");
83   return f;
86 foo
87 foo_parm_returns_foo (foo f)
89   return f;
92 void
93 abort_because (const char *str)
95   printf ("aborting because %s\n", str);
96   abort ();
99 int
100 warn_return_1 ()
102   foo f;
103   printf ("returning 1\n");
104 }                              // { dg-warning "" } control reaches end
107 warn_return_arg (int arg)
109   foo f;
110   printf ("returning %d\n", arg);
111   arg;
112 }                              // { dg-warning "" } control reaches end
115 warn_return_sum (int x, int y)
117   foo f;
118   printf ("returning %d+%d\n", x, y);
119   x + y;
120 }                              // { dg-warning "" } control reaches end
123 warn_return_foo ()
125   foo f;
126   printf ("returning foo\n");
127 }                              // { dg-warning "" } control reaches end
130 warn_foo_parm_returns_foo (foo f)
132   f;
133 }                              // { dg-warning "" } control reaches end
135 main ()                        // { dg-warning "" } no type
137   int ii = return_1 ();
138   if (ii != 1)
139     abort_because ("wrong value returned");
140   int j = return_arg (42);
141   if (j != 42)
142     abort_because ("wrong value returned");
143   int k = return_sum (-69, 69);
144   if (k != 0)
145     abort_because ("wrong value returned");
146   foo f1 = return_foo ();
147   if (foo::si != 1)
148     abort_because ("wrong number of foos");
149   f1.i = 5;
150   int l = foo_parm_returns_i (f1);
151   if (l != 5)
152     abort_because ("l != 5");
153   foo f2 = foo_parm_returns_foo (f1);
154   if (foo::si != 2)
155     abort_because ("wrong number of foos");
156   if (f2.i != 5)
157     abort_because ("f2.i != 5");
158   foo f3 = return_foo ();
159   if (foo::si != 3)
160     abort_because ("wrong number of foos");
161   printf("PASS\n");
162   return 0;