aboutsummaryrefslogtreecommitdiff
path: root/test/Analysis/string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Analysis/string.cpp')
-rw-r--r--test/Analysis/string.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/Analysis/string.cpp b/test/Analysis/string.cpp
new file mode 100644
index 000000000000..f86416da6ee2
--- /dev/null
+++ b/test/Analysis/string.cpp
@@ -0,0 +1,28 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -verify %s
+
+// expected-no-diagnostics
+
+// Test functions that are called "memcpy" but aren't the memcpy
+// we're looking for. Unfortunately, this test cannot be put into
+// a namespace. The out-of-class weird memcpy needs to be recognized
+// as a normal C function for the test to make sense.
+typedef __typeof(sizeof(int)) size_t;
+void *memcpy(void *, const void *, size_t);
+
+struct S {
+ static S s1, s2;
+
+ // A weird overload within the class that accepts a structure reference
+ // instead of a pointer.
+ void memcpy(void *, const S &, size_t);
+ void test_in_class_weird_memcpy() {
+ memcpy(this, s2, 1); // no-crash
+ }
+};
+
+// A similarly weird overload outside of the class.
+void *memcpy(void *, const S &, size_t);
+
+void test_out_of_class_weird_memcpy() {
+ memcpy(&S::s1, S::s2, 1); // no-crash
+}