diff options
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.cpp | 32 |
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) {} +} |

