| // RUN: %clang_analyze_cc1 -std=gnu++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s |
| |
| // expected-no-diagnostics |
| |
| |
| bool foo1(int x) { |
| start: |
| if (x != 3) { |
| ++x; |
| void *ptr = &&start; |
| goto start; |
| } |
| end: |
| return false; |
| } |
| |
| // Targeting a different label with the address-of-label operator. |
| bool foo2(int x) { |
| start: |
| if (x != 3) { |
| ++x; |
| void *ptr = &&end; |
| goto start; |
| } |
| end: |
| return false; |
| } |
| |
| // Different target label in goto |
| bool foo3(int x) { |
| start: |
| if (x != 3) { |
| ++x; |
| void *ptr = &&start; |
| goto end; |
| } |
| end: |
| return false; |
| } |
| |
| // FIXME: Can't detect same algorithm as in foo1 but with different label names. |
| bool foo4(int x) { |
| foo: |
| if (x != 3) { |
| ++x; |
| void *ptr = &&foo; |
| goto foo; |
| } |
| end: |
| return false; |
| } |