• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_analyze_cc1 -triple x86_64-unknown-linux -analyzer-checker=alpha.clone.CloneChecker -analyzer-config alpha.clone.CloneChecker:MinimumCloneComplexity=10 -verify %s
2 
3 // expected-no-diagnostics
4 
foo1(int src)5 int foo1(int src) {
6   int dst = src;
7   if (src < 100 && src > 0) {
8 
9     asm ("mov %1, %0\n\t"
10          "add $1, %0"
11          : "=r" (dst)
12          : "r" (src));
13 
14   }
15   return dst;
16 }
17 
18 // Identical to foo1 except that it adds two instead of one, so it's no clone.
foo2(int src)19 int foo2(int src) {
20   int dst = src;
21   if (src < 100 && src > 0) {
22 
23     asm ("mov %1, %0\n\t"
24          "add $2, %0"
25          : "=r" (dst)
26          : "r" (src));
27 
28   }
29   return dst;
30 }
31 
32 // Identical to foo1 except that its a volatile asm statement, so it's no clone.
foo3(int src)33 int foo3(int src) {
34   int dst = src;
35   if (src < 100 && src > 0) {
36 
37     asm volatile ("mov %1, %0\n\t"
38          "add $1, %0"
39          : "=r" (dst)
40          : "r" (src));
41 
42   }
43   return dst;
44 }
45