1fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s
28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
3fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor
4fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor//PR9463
5fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregorint subfun(const char *text) {
6fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor  const char *tmp = text;
7fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor  return 0;
8fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor}
9fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor
10fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregorvoid fun(const char* text) {
11fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor  int count = 0;
12fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor  bool check = true;
13fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor
14fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor  if (check)
15fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor    {
16fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor      const char *end = text;
17fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor
18fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor      if (check)
19fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor        {
20fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor          do
21fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor            {
22fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor              if (check)
23fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor                {
24fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor                  count = subfun(end);
25fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor                  goto end;
26fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor                }
27fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor
28fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor              check = !check;
29fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor            }
30fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor          while (check);
31fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor        }
32fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor      // also works, after commenting following line of source code
33fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor      int e = subfun(end);
34fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor    }
35fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor end:
36fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor  if (check)
37fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor    ++count;
38fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor}
39fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor
40fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregorconst char *text = "some text";
41fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor
42fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregorint main() {
43fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor	const char *ptr = text;
44fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor
45fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor	fun(ptr);
46fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor
47fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor	return 0;
48fa7b8ced6f3318879b39f44b5ace8346e979826eDouglas Gregor}
49