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