summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/cpp11-migrate/UseAuto/iterator.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-09-04 17:35:07 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-09-04 17:35:07 +0000
commitd9063c46f59f4bec47bcbeddca8ca2f789348c03 (patch)
tree76505542df7a05016dc71ffe44ed3ba264fb54be /clang-tools-extra/test/cpp11-migrate/UseAuto/iterator.cpp
parent6a23d212897d5402035cfaea82260f6dae1c8f2a (diff)
downloadbcm5719-llvm-d9063c46f59f4bec47bcbeddca8ca2f789348c03.tar.gz
bcm5719-llvm-d9063c46f59f4bec47bcbeddca8ca2f789348c03.zip
Rename cpp11-migrate to clang-modernize.
There is no reason to expect this tool to be limited to C++11, it seems very likely to be of on-going interest. It seems likely to be useful for modernizing even as new libraries come out in TSes and other formats than a complete standard. Fundamentally, we need something a bit more general. After some discussion on the list, going with 'clang-modernize'. I've tried to do a reasonably comprehensive job of fixing up the names, but I may still have missed some. Feel free to poke me if you spot any fallout here. Things I've tried reasonably hard to find and fix: - cpp11-migrate -> clang-modernize - Migrator -> Modernizer - Clean up the introductory documentation that was C++11 specific. I'll also point out that this tool continues to delight me. =] Also, a huge thanks to those who have so carefully, thoroughly documented the tool. The docs here are simply phenomenal. Every tool should be this well documented. I hope I have updated the documentation reasonably well, but I'm not very good at documentation, so review much appreciated. llvm-svn: 189960
Diffstat (limited to 'clang-tools-extra/test/cpp11-migrate/UseAuto/iterator.cpp')
-rw-r--r--clang-tools-extra/test/cpp11-migrate/UseAuto/iterator.cpp178
1 files changed, 0 insertions, 178 deletions
diff --git a/clang-tools-extra/test/cpp11-migrate/UseAuto/iterator.cpp b/clang-tools-extra/test/cpp11-migrate/UseAuto/iterator.cpp
deleted file mode 100644
index 8871bc1eb36..00000000000
--- a/clang-tools-extra/test/cpp11-migrate/UseAuto/iterator.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
-// RUN: cpp11-migrate -use-auto %t.cpp -- --std=c++11 -I %S/Inputs
-// RUN: FileCheck -input-file=%t.cpp %s
-//
-// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
-// RUN: cpp11-migrate -use-auto %t.cpp -- --std=c++11 -I %S/Inputs \
-// RUN: -DUSE_INLINE_NAMESPACE=1
-// RUN: FileCheck -input-file=%t.cpp %s
-
-
-#define CONTAINER array
-#include "test_std_container.h"
-#undef CONTAINER
-
-#define CONTAINER vector
-#include "test_std_container.h"
-#undef CONTAINER
-
-#define CONTAINER unordered_map
-#define USE_BASE_CLASS_ITERATORS 1
-#include "test_std_container.h"
-#undef USE_BASE_CLASS_ITERATORS
-#undef CONTAINER
-
-typedef std::vector<int>::iterator int_iterator;
-
-namespace foo {
- template <typename T>
- class vector {
- public:
- class iterator {};
-
- iterator begin() { return iterator(); }
- };
-} // namespace foo
-
-int main(int argc, char **argv) {
- std::vector<int> Vec;
- // CHECK: std::vector<int> Vec;
-
- std::unordered_map<int> Map;
- // CHECK: std::unordered_map<int> Map;
-
- // Types with more sugar should work. Types with less should not.
- {
- int_iterator more_sugar = Vec.begin();
- // CHECK: auto more_sugar = Vec.begin();
-
- internal::iterator_wrapper<std::vector<int>, 0> less_sugar = Vec.begin();
- // CHECK: internal::iterator_wrapper<std::vector<int>, 0> less_sugar = Vec.begin();
- }
-
- // Initialization from initializer lists isn't allowed. Using 'auto'
- // would result in std::initializer_list being deduced for the type.
- {
- std::unordered_map<int>::iterator I{Map.begin()};
- // CHECK: std::unordered_map<int>::iterator I{Map.begin()};
-
- std::unordered_map<int>::iterator I2 = {Map.begin()};
- // CHECK: std::unordered_map<int>::iterator I2 = {Map.begin()};
- }
-
- // Various forms of construction. Default constructors and constructors with
- // all-default parameters shouldn't get transformed. Construction from other
- // types is also not allowed.
- {
- std::unordered_map<int>::iterator copy(Map.begin());
- // CHECK: auto copy(Map.begin());
-
- std::unordered_map<int>::iterator def;
- // CHECK: std::unordered_map<int>::iterator def;
-
- // const_iterator has no default constructor, just one that has >0 params
- // with defaults.
- std::unordered_map<int>::const_iterator constI;
- // CHECK: std::unordered_map<int>::const_iterator constI;
-
- // Uses iterator_provider::const_iterator's conversion constructor.
-
- std::unordered_map<int>::const_iterator constI2 = def;
- // CHECK: std::unordered_map<int>::const_iterator constI2 = def;
-
- std::unordered_map<int>::const_iterator constI3(def);
- // CHECK: std::unordered_map<int>::const_iterator constI3(def);
-
- // Explicit use of conversion constructor
-
- std::unordered_map<int>::const_iterator constI4 = std::unordered_map<int>::const_iterator(def);
- // CHECK: auto constI4 = std::unordered_map<int>::const_iterator(def);
-
- // Uses iterator_provider::iterator's const_iterator conversion operator.
-
- std::unordered_map<int>::iterator I = constI;
- // CHECK: std::unordered_map<int>::iterator I = constI;
-
- std::unordered_map<int>::iterator I2(constI);
- // CHECK: std::unordered_map<int>::iterator I2(constI);
- }
-
- // Weird cases of pointers and references to iterators are not transformed.
- {
- int_iterator I = Vec.begin();
-
- int_iterator *IPtr = &I;
- // CHECK: int_iterator *IPtr = &I;
-
- int_iterator &IRef = I;
- // CHECK: int_iterator &IRef = I;
- }
-
- {
- // Variable declarations in iteration statements.
- for (std::vector<int>::iterator I = Vec.begin(); I != Vec.end(); ++I) {
- // CHECK: for (auto I = Vec.begin(); I != Vec.end(); ++I) {
- }
-
- // Range-based for loops.
- std::array<std::vector<int>::iterator> iter_arr;
- for (std::vector<int>::iterator I: iter_arr) {
- // CHECK: for (auto I: iter_arr) {
- }
-
- // Test with init-declarator-list.
- for (int_iterator I = Vec.begin(),
- E = Vec.end(); I != E; ++I) {
- // CHECK: for (auto I = Vec.begin(),
- // CHECK-NEXT: E = Vec.end(); I != E; ++I) {
- }
- }
-
- // Only std containers should be changed.
- {
- using namespace foo;
- vector<int> foo_vec;
- vector<int>::iterator I = foo_vec.begin();
- // CHECK: vector<int>::iterator I = foo_vec.begin();
- }
-
- // Ensure using directives don't interfere with replacement.
- {
- using namespace std;
- vector<int> std_vec;
- vector<int>::iterator I = std_vec.begin();
- // CHECK: auto I = std_vec.begin();
- }
-
- // Make sure references and cv qualifiers don't get removed (i.e. replaced
- // with just 'auto').
- {
- const auto & I = Vec.begin();
- // CHECK: const auto & I = Vec.begin();
-
- auto && I2 = Vec.begin();
- // CHECK: auto && I2 = Vec.begin();
- }
-
- // Passing a string as an argument to introduce a temporary object
- // that will create an expression with cleanups. Bugzilla: 15550
- {
- std::unordered_map<int> MapFind;
- std::unordered_map<int>::iterator I = MapFind.find("foo");
- // CHECK: auto I = MapFind.find("foo");
- }
-
- // Test for declaration lists
- {
- // Ensusre declaration lists that matches the declaration type with written
- // no-list initializer are transformed.
- std::vector<int>::iterator I = Vec.begin(), E = Vec.end();
- // CHECK: auto I = Vec.begin(), E = Vec.end();
-
- // Declaration lists with non-initialized variables should not be
- // transformed.
- std::vector<int>::iterator J = Vec.begin(), K;
- // CHECK: std::vector<int>::iterator J = Vec.begin(), K;
- }
- return 0;
-}
OpenPOWER on IntegriCloud