diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2013-09-04 17:35:07 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2013-09-04 17:35:07 +0000 |
commit | d9063c46f59f4bec47bcbeddca8ca2f789348c03 (patch) | |
tree | 76505542df7a05016dc71ffe44ed3ba264fb54be /clang-tools-extra/test/clang-modernize/HeaderReplacements | |
parent | 6a23d212897d5402035cfaea82260f6dae1c8f2a (diff) | |
download | bcm5719-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')
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); +} |