summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/clang-modernize/HeaderReplacements
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/clang-modernize/HeaderReplacements
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/clang-modernize/HeaderReplacements')
-rw-r--r--clang-tools-extra/test/clang-modernize/HeaderReplacements/Inputs/no_yaml.h8
-rw-r--r--clang-tools-extra/test/clang-modernize/HeaderReplacements/common.cpp16
-rw-r--r--clang-tools-extra/test/clang-modernize/HeaderReplacements/common.h27
-rw-r--r--clang-tools-extra/test/clang-modernize/HeaderReplacements/common_expected.yaml20
-rw-r--r--clang-tools-extra/test/clang-modernize/HeaderReplacements/main.cpp34
-rw-r--r--clang-tools-extra/test/clang-modernize/HeaderReplacements/main_expected.yaml12
-rw-r--r--clang-tools-extra/test/clang-modernize/HeaderReplacements/no_yaml.cpp24
7 files changed, 141 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-modernize/HeaderReplacements/Inputs/no_yaml.h b/clang-tools-extra/test/clang-modernize/HeaderReplacements/Inputs/no_yaml.h
new file mode 100644
index 00000000000..8e09412c452
--- /dev/null
+++ b/clang-tools-extra/test/clang-modernize/HeaderReplacements/Inputs/no_yaml.h
@@ -0,0 +1,8 @@
+void update(int (&arr)[10]) {
+ int val = 1;
+ for (unsigned i = 0; i < sizeof(arr)/sizeof(int); ++i) {
+ arr[i] = val++;
+ // CHECK: for (auto & elem : arr) {
+ // CHECK-NEXT: elem = val++;
+ }
+}
diff --git a/clang-tools-extra/test/clang-modernize/HeaderReplacements/common.cpp b/clang-tools-extra/test/clang-modernize/HeaderReplacements/common.cpp
new file mode 100644
index 00000000000..9c4f0e543ce
--- /dev/null
+++ b/clang-tools-extra/test/clang-modernize/HeaderReplacements/common.cpp
@@ -0,0 +1,16 @@
+// This is just a dummy run command to keep lit happy. Tests for this file are
+// in main.cpp
+// RUN: true
+
+#include "common.h"
+
+void func1(int &I) {
+}
+
+void func2() {
+ container C1;
+ container C2;
+ for (container::iterator I = C1.begin(), E = C1.end(); I != E; ++I) {
+ C2.push_back(*I);
+ }
+}
diff --git a/clang-tools-extra/test/clang-modernize/HeaderReplacements/common.h b/clang-tools-extra/test/clang-modernize/HeaderReplacements/common.h
new file mode 100644
index 00000000000..3bb98cc705c
--- /dev/null
+++ b/clang-tools-extra/test/clang-modernize/HeaderReplacements/common.h
@@ -0,0 +1,27 @@
+#ifndef CPP11_MIGRATE_TEST_HEADER_REPLACEMENTS_COMMON_H
+#define CPP11_MIGRATE_TEST_HEADER_REPLACEMENTS_COMMON_H
+
+struct container {
+ struct iterator {
+ int &operator*();
+ const int &operator*() const;
+ iterator &operator++();
+ bool operator!=(const iterator &other);
+ };
+
+ iterator begin();
+ iterator end();
+ void push_back(const int &);
+};
+
+void func1(int &I);
+void func2();
+
+void dostuff() {
+ container C;
+ for (container::iterator I = C.begin(), E = C.end(); I != E; ++I) {
+ func1(*I);
+ }
+}
+
+#endif // CPP11_MIGRATE_TEST_HEADER_REPLACEMENTS_COMMON_H
diff --git a/clang-tools-extra/test/clang-modernize/HeaderReplacements/common_expected.yaml b/clang-tools-extra/test/clang-modernize/HeaderReplacements/common_expected.yaml
new file mode 100644
index 00000000000..67eb1fb9104
--- /dev/null
+++ b/clang-tools-extra/test/clang-modernize/HeaderReplacements/common_expected.yaml
@@ -0,0 +1,20 @@
+---
+MainSourceFile: "$(path)/common.cpp"
+Replacements:
+ - FilePath: "$(path)/common.h"
+ Offset: 506
+ Length: 2
+ ReplacementText: "elem"
+ - FilePath: "$(path)/common.h"
+ Offset: 432
+ Length: 61
+ ReplacementText: "(auto & elem : C)"
+ - FilePath: "$(path)/common.cpp"
+ Offset: 289
+ Length: 2
+ ReplacementText: "elem"
+ - FilePath: "$(path)/common.cpp"
+ Offset: 206
+ Length: 63
+ ReplacementText: "(auto & elem : C1)"
+...
diff --git a/clang-tools-extra/test/clang-modernize/HeaderReplacements/main.cpp b/clang-tools-extra/test/clang-modernize/HeaderReplacements/main.cpp
new file mode 100644
index 00000000000..f2ad4435069
--- /dev/null
+++ b/clang-tools-extra/test/clang-modernize/HeaderReplacements/main.cpp
@@ -0,0 +1,34 @@
+// The following block tests the following:
+// - Only 1 file is generated per translation unit
+// - Replacements are written in YAML that matches the expected YAML file
+// The test is run in %T/SerializeTest so it's easy to create a clean test
+// directory.
+//
+// RUN: rm -rf %T/SerializeTest
+// RUN: mkdir -p %T/SerializeTest
+// RUN: cp %S/main.cpp %S/common.cpp %S/common.h %T/SerializeTest
+// RUN: clang-modernize -loop-convert -headers -serialize-replacements -include=%T/SerializeTest %T/SerializeTest/main.cpp %T/SerializeTest/common.cpp --
+// Check that only 1 file is generated per translation unit
+// RUN: ls -1 %T/SerializeTest | FileCheck %s --check-prefix=MAIN_CPP
+// RUN: ls -1 %T/SerializeTest | FileCheck %s --check-prefix=COMMON_CPP
+// We need to put the build path to the expected YAML file to diff against the generated one.
+// RUN: sed -e 's#$(path)#%/T/SerializeTest#g' %S/main_expected.yaml > %T/SerializeTest/main_expected.yaml
+// RUN: sed -i -e 's#\\#/#g' %T/SerializeTest/main.cpp_*.yaml
+// RUN: diff -b %T/SerializeTest/main_expected.yaml %T/SerializeTest/main.cpp_*.yaml
+// RUN: sed -e 's#$(path)#%/T/SerializeTest#g' %S/common_expected.yaml > %T/SerializeTest/common_expected.yaml
+// RUN: sed -i -e 's#\\#/#g' %T/SerializeTest/common.cpp_*.yaml
+// RUN: diff -b %T/SerializeTest/common_expected.yaml %T/SerializeTest/common.cpp_*.yaml
+//
+// The following are for FileCheck when used on output of 'ls'. See above.
+// MAIN_CPP: {{^main.cpp_.*.yaml$}}
+// MAIN_CPP-NOT: {{main.cpp_.*.yaml}}
+//
+// COMMON_CPP: {{^common.cpp_.*.yaml$}}
+// COMMON_CPP-NOT: {{common.cpp_.*.yaml}}
+
+#include "common.h"
+
+void test_header_replacement() {
+ dostuff();
+ func2();
+}
diff --git a/clang-tools-extra/test/clang-modernize/HeaderReplacements/main_expected.yaml b/clang-tools-extra/test/clang-modernize/HeaderReplacements/main_expected.yaml
new file mode 100644
index 00000000000..8702bc17245
--- /dev/null
+++ b/clang-tools-extra/test/clang-modernize/HeaderReplacements/main_expected.yaml
@@ -0,0 +1,12 @@
+---
+MainSourceFile: "$(path)/main.cpp"
+Replacements:
+ - FilePath: "$(path)/common.h"
+ Offset: 506
+ Length: 2
+ ReplacementText: "elem"
+ - FilePath: "$(path)/common.h"
+ Offset: 432
+ Length: 61
+ ReplacementText: "(auto & elem : C)"
+...
diff --git a/clang-tools-extra/test/clang-modernize/HeaderReplacements/no_yaml.cpp b/clang-tools-extra/test/clang-modernize/HeaderReplacements/no_yaml.cpp
new file mode 100644
index 00000000000..8a33a63ada6
--- /dev/null
+++ b/clang-tools-extra/test/clang-modernize/HeaderReplacements/no_yaml.cpp
@@ -0,0 +1,24 @@
+// Ensure that if -serialize-replacements is not provided, no serialized
+// replacement files should be generated and the changes are made directly.
+//
+// RUN: mkdir -p %T/Inputs
+// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
+// RUN: grep -Ev "// *[A-Z-]+:" %S/Inputs/no_yaml.h > %T/Inputs/no_yaml.h
+// RUN: clang-modernize -loop-convert %t.cpp -headers -include=%T/Inputs -- -I %T/Inputs/no_yaml.h
+// RUN: FileCheck --input-file=%t.cpp %s
+// RUN: FileCheck --input-file=%T/Inputs/no_yaml.h %S/Inputs/no_yaml.h
+// RUN: ls -1 %T | FileCheck %s --check-prefix=NO_YAML
+//
+// NO_YAML-NOT: {{no_yaml.cpp_.*.yaml}}
+#include "Inputs/no_yaml.h"
+
+void func() {
+ int arr[10];
+ for (unsigned i = 0; i < sizeof(arr)/sizeof(int); ++i) {
+ arr[i] = 0;
+ // CHECK: for (auto & elem : arr) {
+ // CHECK-NEXT: elem = 0;
+ }
+
+ update(arr);
+}
OpenPOWER on IntegriCloud