[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