52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -Wimplicit-fallthrough-per-function %s
 | 
						|
 | 
						|
 | 
						|
int fallthrough(int n) {
 | 
						|
  switch (n / 10) {
 | 
						|
    case 0:
 | 
						|
      n += 100;
 | 
						|
    case 1:  // expected-warning{{unannotated fall-through}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
 | 
						|
      switch (n) {
 | 
						|
      case 111:
 | 
						|
        n += 111;
 | 
						|
        [[clang::fallthrough]];
 | 
						|
      case 112:
 | 
						|
        n += 112;
 | 
						|
      case 113:  // expected-warning{{unannotated fall-through}} expected-note{{insert '[[clang::fallthrough]];' to silence this warning}} expected-note{{insert 'break;' to avoid fall-through}}
 | 
						|
        n += 113;
 | 
						|
        break    ;
 | 
						|
      }
 | 
						|
  }
 | 
						|
  return n;
 | 
						|
}
 | 
						|
 | 
						|
int fallthrough2(int n) {
 | 
						|
  switch (n / 10) {
 | 
						|
    case 0:
 | 
						|
      n += 100;
 | 
						|
    case 1:  // no warning, as we didn't "opt-in" for it in this method
 | 
						|
      switch (n) {
 | 
						|
      case 111:
 | 
						|
        n += 111;
 | 
						|
      case 112:  // no warning, as we didn't "opt-in" for it in this method
 | 
						|
        n += 112;
 | 
						|
      case 113:  // no warning, as we didn't "opt-in" for it in this method
 | 
						|
        n += 113;
 | 
						|
        break    ;
 | 
						|
      }
 | 
						|
  }
 | 
						|
  return n;
 | 
						|
}
 | 
						|
 | 
						|
void unscoped(int n) {
 | 
						|
  switch (n % 2) {
 | 
						|
    case 0:
 | 
						|
      // FIXME: This should be typo-corrected, probably.
 | 
						|
      [[fallthrough]]; // expected-warning{{unknown attribute 'fallthrough' ignored}}
 | 
						|
    case 2: // expected-warning{{unannotated fall-through}} expected-note{{clang::fallthrough}} expected-note{{break;}}
 | 
						|
      [[clang::fallthrough]];
 | 
						|
    case 1:
 | 
						|
      break;
 | 
						|
  }
 | 
						|
}
 |