diff options
Diffstat (limited to 'clang/test/Analysis/copypaste/asm.cpp')
| -rw-r--r-- | clang/test/Analysis/copypaste/asm.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/clang/test/Analysis/copypaste/asm.cpp b/clang/test/Analysis/copypaste/asm.cpp new file mode 100644 index 00000000000..61f0def594d --- /dev/null +++ b/clang/test/Analysis/copypaste/asm.cpp @@ -0,0 +1,44 @@ +// RUN: %clang_cc1 -analyze -std=c++11 -analyzer-checker=alpha.clone.CloneChecker -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; +} |

