[clang-tidy] add OverrideMacro to modernize-use-override check
authorPaul Hoad <mydeveloperday@gmail.com>
Thu, 28 Feb 2019 20:00:48 +0000 (20:00 +0000)
committerPaul Hoad <mydeveloperday@gmail.com>
Thu, 28 Feb 2019 20:00:48 +0000 (20:00 +0000)
commit68f5e5456f85fbae04cdd2ddab254736b23d5e47
tree87a881ca993c7abbc3b461679d41c3095933f0c9
parenta6ff69f6ddf9ab3b3ea8f3f57e8b91a24fa9319f
[clang-tidy] add OverrideMacro to modernize-use-override check

Summary:
The usefulness of **modernize-use-override** can be reduced if you have to live in an environment where you support multiple compilers, some of which sadly are not yet fully C++11 compliant

some codebases have to use override as a macro OVERRIDE e.g.

```
// GCC 4.7 supports explicit virtual overrides when C++11 support is enabled.
```

This allows code to be compiled with C++11 compliant compilers and get warnings and errors that clang, MSVC,gcc can give, while still allowing other legacy pre C++11 compilers to compile the code. This can be an important step towards modernizing C++ code whilst living in a legacy codebase.

When it comes to clang tidy, the use of the **modernize-use-override** is one of the most useful checks, but the messages reported are inaccurate for that codebase if the standard approach is to use the macros OVERRIDE and/or FINAL.

When combined with fix-its that introduce the C++11 override keyword, they become fatal, resulting in the modernize-use-override check being turned off to prevent the introduction of such errors.

This revision, allows the possibility for the replacement **override **to be a macro instead, Allowing the clang-tidy check to be run on  both pre and post C++11 code, and allowing fix-its to be applied.

Reviewers: alexfh, JonasToth, hokein, Eugene.Zelenko, aaron.ballman

Reviewed By: alexfh, JonasToth

Subscribers: lewmpk, malcolm.parsons, jdoerfert, xazax.hun, cfe-commits, llvm-commits

Tags: #clang-tools-extra

Differential Revision: https://reviews.llvm.org/D57087

llvm-svn: 355132
clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp
clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-use-override.rst
clang-tools-extra/test/clang-tidy/modernize-use-override-with-macro.cpp [new file with mode: 0644]
clang-tools-extra/test/clang-tidy/modernize-use-override-with-no-macro-inscope.cpp [new file with mode: 0644]