1*561f0de6SRaphael Isemann // RUN: %clang_analyze_cc1 -std=gnu++11 -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s 278692ea5SArtem Dergachev 378692ea5SArtem Dergachev // expected-no-diagnostics 478692ea5SArtem Dergachev 578692ea5SArtem Dergachev foo1(int x)678692ea5SArtem Dergachevbool foo1(int x) { 778692ea5SArtem Dergachev start: 878692ea5SArtem Dergachev if (x != 3) { 978692ea5SArtem Dergachev ++x; 1078692ea5SArtem Dergachev void *ptr = &&start; 1178692ea5SArtem Dergachev goto start; 1278692ea5SArtem Dergachev } 1378692ea5SArtem Dergachev end: 1478692ea5SArtem Dergachev return false; 1578692ea5SArtem Dergachev } 1678692ea5SArtem Dergachev 1778692ea5SArtem Dergachev // Targeting a different label with the address-of-label operator. foo2(int x)1878692ea5SArtem Dergachevbool foo2(int x) { 1978692ea5SArtem Dergachev start: 2078692ea5SArtem Dergachev if (x != 3) { 2178692ea5SArtem Dergachev ++x; 2278692ea5SArtem Dergachev void *ptr = &&end; 2378692ea5SArtem Dergachev goto start; 2478692ea5SArtem Dergachev } 2578692ea5SArtem Dergachev end: 2678692ea5SArtem Dergachev return false; 2778692ea5SArtem Dergachev } 2878692ea5SArtem Dergachev 2978692ea5SArtem Dergachev // Different target label in goto foo3(int x)3078692ea5SArtem Dergachevbool foo3(int x) { 3178692ea5SArtem Dergachev start: 3278692ea5SArtem Dergachev if (x != 3) { 3378692ea5SArtem Dergachev ++x; 3478692ea5SArtem Dergachev void *ptr = &&start; 3578692ea5SArtem Dergachev goto end; 3678692ea5SArtem Dergachev } 3778692ea5SArtem Dergachev end: 3878692ea5SArtem Dergachev return false; 3978692ea5SArtem Dergachev } 4078692ea5SArtem Dergachev 4178692ea5SArtem Dergachev // FIXME: Can't detect same algorithm as in foo1 but with different label names. foo4(int x)4278692ea5SArtem Dergachevbool foo4(int x) { 4378692ea5SArtem Dergachev foo: 4478692ea5SArtem Dergachev if (x != 3) { 4578692ea5SArtem Dergachev ++x; 4678692ea5SArtem Dergachev void *ptr = &&foo; 4778692ea5SArtem Dergachev goto foo; 4878692ea5SArtem Dergachev } 4978692ea5SArtem Dergachev end: 5078692ea5SArtem Dergachev return false; 5178692ea5SArtem Dergachev } 52