// RUN: %clang_analyze_cc1 -triple x86_64-unknown-linux -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s | |
// expected-no-diagnostics | |
int foo1(int src) { | |
int dst = src; | |
if (src < 100 && src > 0) { | |
asm ("mov %1, %0\n\t" | |
"add $1, %0" | |
: "=r" (dst) | |
: "r" (src)); | |
} | |
return dst; | |
} | |
// Identical to foo1 except that it adds two instead of one, so it's no clone. | |
int foo2(int src) { | |
int dst = src; | |
if (src < 100 && src > 0) { | |
asm ("mov %1, %0\n\t" | |
"add $2, %0" | |
: "=r" (dst) | |
: "r" (src)); | |
} | |
return dst; | |
} | |
// Identical to foo1 except that its a volatile asm statement, so it's no clone. | |
int foo3(int src) { | |
int dst = src; | |
if (src < 100 && src > 0) { | |
asm volatile ("mov %1, %0\n\t" | |
"add $1, %0" | |
: "=r" (dst) | |
: "r" (src)); | |
} | |
return dst; | |
} |