summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/cpp11-migrate/LoopConvert
diff options
context:
space:
mode:
authorEdwin Vane <edwin.vane@intel.com>2013-03-04 16:56:04 +0000
committerEdwin Vane <edwin.vane@intel.com>2013-03-04 16:56:04 +0000
commit529e3c7c5767a53f55ae7b1b5b42cae944da01ac (patch)
tree290bd027525646a985d803f95b9439ad4133d8f0 /clang-tools-extra/test/cpp11-migrate/LoopConvert
parent2f43085b469c739ecd0a98c720aba254ceda018c (diff)
downloadbcm5719-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.h13
-rw-r--r--clang-tools-extra/test/cpp11-migrate/LoopConvert/iterator_failing.cpp14
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) {
+ }
+}
OpenPOWER on IntegriCloud