forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -fsyntax-only -Wunreachable-code-aggressive -fblocks -verify %s
 | 
						|
 | 
						|
int j;
 | 
						|
int bar();
 | 
						|
int test1() {
 | 
						|
  for (int i = 0;
 | 
						|
       i != 10;
 | 
						|
       ++i) {  // expected-warning {{loop will run at most once (loop increment never executed)}}
 | 
						|
    if (j == 23) // missing {}'s
 | 
						|
      bar();
 | 
						|
      return 1;
 | 
						|
  }
 | 
						|
  return 0;
 | 
						|
  return 1; // expected-warning {{will never be executed}}
 | 
						|
}
 | 
						|
 | 
						|
int test1_B() {
 | 
						|
  for (int i = 0;
 | 
						|
       i != 10;
 | 
						|
       ++i) {  // expected-warning {{loop will run at most once (loop increment never executed)}}
 | 
						|
    if (j == 23) // missing {}'s
 | 
						|
      bar();
 | 
						|
      return 1;
 | 
						|
  }
 | 
						|
  return 0;
 | 
						|
  return bar(); // expected-warning {{will never be executed}}
 | 
						|
}
 | 
						|
 | 
						|
void test2(int i) {
 | 
						|
  switch (i) {
 | 
						|
  case 0:
 | 
						|
    break;
 | 
						|
    bar();     // expected-warning {{will never be executed}}
 | 
						|
  case 2:
 | 
						|
    switch (i) {
 | 
						|
    default:
 | 
						|
    a: goto a;
 | 
						|
    }
 | 
						|
    bar();     // expected-warning {{will never be executed}}
 | 
						|
  }
 | 
						|
  b: goto b;
 | 
						|
  bar();       // expected-warning {{will never be executed}}
 | 
						|
}
 | 
						|
 | 
						|
void test3() {
 | 
						|
  ^{ return;
 | 
						|
     bar();    // expected-warning {{will never be executed}}
 | 
						|
  }();
 | 
						|
  while (++j) {
 | 
						|
    continue;
 | 
						|
    bar();     // expected-warning {{will never be executed}}
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
// PR 6130 - Don't warn about bogus unreachable code with throw's and
 | 
						|
// temporary objects.
 | 
						|
class PR6130 {
 | 
						|
public:
 | 
						|
  PR6130();
 | 
						|
  ~PR6130();
 | 
						|
};
 | 
						|
 | 
						|
int pr6130(unsigned i) {
 | 
						|
  switch(i) {
 | 
						|
    case 0: return 1;
 | 
						|
    case 1: return 2;
 | 
						|
    default:
 | 
						|
      throw PR6130(); // no-warning
 | 
						|
  }
 | 
						|
}
 |