forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify -Wdangling-else %s
 | |
| 
 | |
| void f(int a, int b, int c, int d, int e) {
 | |
| 
 | |
|   // should warn
 | |
|   { if (a) if (b) d++; else e++; } // expected-warning {{add explicit braces to avoid dangling else}}
 | |
|   { if (a) while (b) if (c) d++; else e++; } // expected-warning {{add explicit braces to avoid dangling else}}
 | |
|   { if (a) switch (b) if (c) d++; else e++; } // expected-warning {{add explicit braces to avoid dangling else}}
 | |
|   { if (a) for (;;) if (c) d++; else e++; } // expected-warning {{add explicit braces to avoid dangling else}}
 | |
|   { if (a) if (b) if (d) d++; else e++; else d--; } // expected-warning {{add explicit braces to avoid dangling else}}
 | |
| 
 | |
|   if (a)
 | |
|     if (b) {
 | |
|       d++;
 | |
|     } else e++; // expected-warning {{add explicit braces to avoid dangling else}}
 | |
| 
 | |
|   // shouldn't
 | |
|   { if (a) if (b) d++; }
 | |
|   { if (a) if (b) if (c) d++; }
 | |
|   { if (a) if (b) d++; else e++; else d--; }
 | |
|   { if (a) if (b) if (d) d++; else e++; else d--; else e--; }
 | |
|   { if (a) do if (b) d++; else e++; while (c); }
 | |
| 
 | |
|   if (a) {
 | |
|     if (b) d++;
 | |
|     else e++;
 | |
|   }
 | |
| 
 | |
|   if (a) {
 | |
|     if (b) d++;
 | |
|   } else e++;
 | |
| }
 | |
| 
 | |
| // Somewhat more elaborate case that shouldn't warn.
 | |
| class A {
 | |
|  public:
 | |
|   void operator<<(const char* s) {}
 | |
| };
 | |
| 
 | |
| void HandleDisabledThing() {}
 | |
| A GetThing() { return A(); }
 | |
| 
 | |
| #define FOO(X) \
 | |
|    switch (0) default: \
 | |
|      if (!(X)) \
 | |
|        HandleDisabledThing(); \
 | |
|      else \
 | |
|        GetThing()
 | |
| 
 | |
| void f(bool cond) {
 | |
|   int x = 0;
 | |
|   if (cond)
 | |
|     FOO(x) << "hello"; // no warning
 | |
| }
 | |
| 
 |