[analyzer] CStringChecker: Add the forgotten test file.
authorArtem Dergachev <artem.dergachev@gmail.com>
Wed, 19 Dec 2018 21:51:59 +0000 (21:51 +0000)
committerArtem Dergachev <artem.dergachev@gmail.com>
Wed, 19 Dec 2018 21:51:59 +0000 (21:51 +0000)
Differential Revision: https://reviews.llvm.org/D55873

rdar://problem/45366551

llvm-svn: 349683

clang/test/Analysis/string.cpp [new file with mode: 0644]

diff --git a/clang/test/Analysis/string.cpp b/clang/test/Analysis/string.cpp
new file mode 100644 (file)
index 0000000..f86416d
--- /dev/null
@@ -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
+}