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)6bool 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)18bool 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)30bool 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)42bool 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