[clang-tools-extra] r176437 - Adding failing LoopConvert testcase
Edwin Vane
edwin.vane at intel.com
Mon Mar 4 08:56:04 PST 2013
Author: revane
Date: Mon Mar 4 10:56:04 2013
New Revision: 176437
URL: http://llvm.org/viewvc/llvm-project?rev=176437&view=rev
Log:
Adding failing LoopConvert testcase
LoopConvert isn't properly handling iterators whose dereference operator
returns by value. This test case demonstrates the failure.
See PR15437.
Added:
clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/iterator_failing.cpp
Modified:
clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/Inputs/structures.h
Modified: clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/Inputs/structures.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/Inputs/structures.h?rev=176437&r1=176436&r2=176437&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/Inputs/structures.h (original)
+++ clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/Inputs/structures.h Mon Mar 4 10:56:04 2013
@@ -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
Added: clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/iterator_failing.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/iterator_failing.cpp?rev=176437&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/iterator_failing.cpp (added)
+++ clang-tools-extra/trunk/test/cpp11-migrate/LoopConvert/iterator_failing.cpp Mon Mar 4 10:56:04 2013
@@ -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) {
+ }
+}
More information about the cfe-commits
mailing list