]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Analysis/copypaste/asm.cpp
Vendor import of clang trunk r290819:
[FreeBSD/FreeBSD.git] / test / Analysis / copypaste / asm.cpp
1 // RUN: %clang_cc1 -triple x86_64-unknown-linux -analyze -analyzer-checker=alpha.clone.CloneChecker -verify %s
2
3 // expected-no-diagnostics
4
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.
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.
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 }