diff options
| author | Edwin Vane <edwin.vane@intel.com> | 2013-03-04 16:56:04 +0000 |
|---|---|---|
| committer | Edwin Vane <edwin.vane@intel.com> | 2013-03-04 16:56:04 +0000 |
| commit | 529e3c7c5767a53f55ae7b1b5b42cae944da01ac (patch) | |
| tree | 290bd027525646a985d803f95b9439ad4133d8f0 /clang-tools-extra/test/cpp11-migrate/LoopConvert | |
| parent | 2f43085b469c739ecd0a98c720aba254ceda018c (diff) | |
| download | bcm5719-llvm-529e3c7c5767a53f55ae7b1b5b42cae944da01ac.tar.gz bcm5719-llvm-529e3c7c5767a53f55ae7b1b5b42cae944da01ac.zip | |
Adding failing LoopConvert testcase
LoopConvert isn't properly handling iterators whose dereference operator
returns by value. This test case demonstrates the failure.
See PR15437.
llvm-svn: 176437
Diffstat (limited to 'clang-tools-extra/test/cpp11-migrate/LoopConvert')
| -rw-r--r-- | clang-tools-extra/test/cpp11-migrate/LoopConvert/Inputs/structures.h | 13 | ||||
| -rw-r--r-- | clang-tools-extra/test/cpp11-migrate/LoopConvert/iterator_failing.cpp | 14 |
2 files changed, 27 insertions, 0 deletions
diff --git a/clang-tools-extra/test/cpp11-migrate/LoopConvert/Inputs/structures.h b/clang-tools-extra/test/cpp11-migrate/LoopConvert/Inputs/structures.h index 2507b34200c..3379b05ac1e 100644 --- a/clang-tools-extra/test/cpp11-migrate/LoopConvert/Inputs/structures.h +++ b/clang-tools-extra/test/cpp11-migrate/LoopConvert/Inputs/structures.h @@ -137,4 +137,17 @@ struct Nested { iterator end(); }; +// Like llvm::SmallPtrSet, the iterator has a dereference operator that returns +// by value instead of by reference. +template <typename T> +struct PtrSet { + struct iterator { + bool operator!=(const iterator &other) const; + const T operator*(); + iterator &operator++(); + }; + iterator begin() const; + iterator end() const; +}; + #endif // STRUCTURES_H diff --git a/clang-tools-extra/test/cpp11-migrate/LoopConvert/iterator_failing.cpp b/clang-tools-extra/test/cpp11-migrate/LoopConvert/iterator_failing.cpp new file mode 100644 index 00000000000..5684497f745 --- /dev/null +++ b/clang-tools-extra/test/cpp11-migrate/LoopConvert/iterator_failing.cpp @@ -0,0 +1,14 @@ +// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp +// RUN: cpp11-migrate -loop-convert %t.cpp -- -I %S/Inputs +// RUN: FileCheck -input-file=%t.cpp %s +// XFAIL: * +#include "structures.h" + +void f() { + // See PR15437 for details. + PtrSet<int*> int_ptrs; + for (PtrSet<int*>::iterator I = int_ptrs.begin(), + E = int_ptrs.end(); I != E; ++I) { + // CHECK: for (const auto & int_ptr : int_ptrs) { + } +} |

