1/* This testcase is part of GDB, the GNU debugger.
2
3   Copyright 2012-2020 Free Software Foundation, Inc.
4
5   This program is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published by
7   the Free Software Foundation; either version 3 of the License, or
8   (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14
15   You should have received a copy of the GNU General Public License
16   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17
18class foo
19{
20public:
21  static int bar (void)
22  {
23    int i = 5;
24    bool first = true;
25
26  to_the_top:  /* bar:to_the_top */
27    while (1)
28      {
29	if (i == 1)
30	  {
31	    if (first)
32	      {
33		first = false;
34		goto to_the_top;
35	      }
36	    else
37	      goto get_out_of_here;
38	  }
39
40	--i;
41      }
42
43  get_out_of_here: /* bar:get_out_of_here */
44    return i;
45  }
46
47  int baz (int a)
48  {
49    int i = a;
50    bool first = true;
51
52  to_the_top: /* baz:to_the_top */
53    while (1)
54      {
55	if (i == 1)
56	  {
57	    if (first)
58	      {
59		first = false;
60		goto to_the_top;
61	      }
62	    else
63	      goto get_out_of_here;
64	  }
65
66	--i;
67      }
68
69  get_out_of_here: /* baz:get_out_of_here */
70    return i;
71  }
72};
73
74int
75main (void)
76{
77  foo f;
78  return f.baz (foo::bar () + 3);
79}
80
81