summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/cpp11-migrate/LoopConvert/free_begin_end_fail.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/test/cpp11-migrate/LoopConvert/free_begin_end_fail.cpp')
-rw-r--r--clang-tools-extra/test/cpp11-migrate/LoopConvert/free_begin_end_fail.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/clang-tools-extra/test/cpp11-migrate/LoopConvert/free_begin_end_fail.cpp b/clang-tools-extra/test/cpp11-migrate/LoopConvert/free_begin_end_fail.cpp
new file mode 100644
index 00000000000..27f7e8bf75e
--- /dev/null
+++ b/clang-tools-extra/test/cpp11-migrate/LoopConvert/free_begin_end_fail.cpp
@@ -0,0 +1,32 @@
+// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
+// RUN: cpp11-migrate -loop-convert %t.cpp -- -I %S/Inputs -std=c++11
+// RUN: FileCheck -input-file=%t.cpp %s
+// XFAIL: *
+
+struct MyArray {
+ unsigned size();
+};
+
+template <typename T>
+struct MyContainer {
+};
+
+int *begin(const MyArray &Arr);
+int *end(const MyArray &Arr);
+
+template <typename T>
+T *begin(const MyContainer<T> &C);
+template <typename T>
+T *end(const MyContainer<T> &C);
+
+// The Loop Convert Transform doesn't detect free functions begin()/end() and
+// so fails to transform these cases which it should.
+void f() {
+ MyArray Arr;
+ for (unsigned i = 0, e = Arr.size(); i < e; ++i) {}
+ // CHECK: for (auto & elem : Arr) {}
+
+ MyContainer<int> C;
+ for (int *I = begin(C), *E = end(C); I != E; ++I) {}
+ // CHECK: for (auto & elem : C) {}
+}
OpenPOWER on IntegriCloud