• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_analyze_cc1 -std=gnu++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s
2 
3 // expected-no-diagnostics
4 
5 
foo1(int x)6 bool foo1(int x) {
7   start:
8   if (x != 3) {
9     ++x;
10     void *ptr = &&start;
11     goto start;
12   }
13   end:
14   return false;
15 }
16 
17 // Targeting a different label with the address-of-label operator.
foo2(int x)18 bool foo2(int x) {
19   start:
20   if (x != 3) {
21     ++x;
22     void *ptr = &&end;
23     goto start;
24   }
25   end:
26   return false;
27 }
28 
29 // Different target label in goto
foo3(int x)30 bool foo3(int x) {
31   start:
32   if (x != 3) {
33     ++x;
34     void *ptr = &&start;
35     goto end;
36   }
37   end:
38   return false;
39 }
40 
41 // FIXME: Can't detect same algorithm as in foo1 but with different label names.
foo4(int x)42 bool foo4(int x) {
43   foo:
44   if (x != 3) {
45     ++x;
46     void *ptr = &&foo;
47     goto foo;
48   }
49   end:
50   return false;
51 }
52