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;
 | |
|   }
 | |
| }
 |