| // RUN: %clang_cc1 -fsyntax-only -verify -fcxx-exceptions -std=c++17 %s | 
 | // expected-no-diagnostics | 
 |  | 
 | //PR9463 | 
 | int subfun(const char *text) { | 
 |   const char *tmp = text; | 
 |   return 0; | 
 | } | 
 |  | 
 | void fun(const char* text) { | 
 |   int count = 0; | 
 |   bool check = true; | 
 |  | 
 |   if (check) | 
 |     { | 
 |       const char *end = text; | 
 |  | 
 |       if (check) | 
 |         { | 
 |           do | 
 |             { | 
 |               if (check) | 
 |                 { | 
 |                   count = subfun(end); | 
 |                   goto end; | 
 |                 } | 
 |  | 
 |               check = !check; | 
 |             } | 
 |           while (check); | 
 |         } | 
 |       // also works, after commenting following line of source code | 
 |       int e = subfun(end); | 
 |     } | 
 |  end: | 
 |   if (check) | 
 |     ++count; | 
 | } | 
 |  | 
 | const char *text = "some text"; | 
 |  | 
 | int main() { | 
 | 	const char *ptr = text; | 
 |  | 
 | 	fun(ptr); | 
 |  | 
 | 	return 0; | 
 | } | 
 |  | 
 | void asm_goto_try_catch() { | 
 |   try { | 
 |     __label__ label; | 
 |     asm goto("" : : : : label); | 
 |     label:; | 
 |   } catch(...) { | 
 |     __label__ label; | 
 |     asm goto("" : : : : label); | 
 |     label:; | 
 |   }; | 
 |   if constexpr(false) { | 
 |     __label__ label; | 
 |     asm goto("" : : : : label); | 
 |     label:; | 
 |   } | 
 | } |