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