[clang-tidy] modernize-use-override new option AllowOverrideAndFinal
authorMitchell Balan <mitchell@stellarscience.com>
Fri, 15 Nov 2019 21:13:48 +0000 (16:13 -0500)
committerMitchell Balan <mitchell@stellarscience.com>
Fri, 15 Nov 2019 21:16:07 +0000 (16:16 -0500)
commit50e99563fb0459f5160572eef3c4e6062b8ad3f2
tree18783c7823e202be79f8af34c453e33a97d04905
parentee0882bdf866ad8877dfda3820a822c851d0733a
[clang-tidy] modernize-use-override new option AllowOverrideAndFinal

Summary:
In addition to adding `override` wherever possible, clang-tidy's `modernize-use-override` nicely removes `virtual` when `override` or `final` is specified, and further removes override when final is specified. While this is great default behavior, when code needs to be compiled with gcc at high warning levels that include `gcc -Wsuggest-override` or `gcc -Werror=suggest-override`, clang-tidy's removal of the redundant `override` keyword causes gcc to emit a warning or error. This discrepancy / conflict has been noted by others including a comment on Stack Overflow and by Mozilla's Firefox developers.

This patch adds an AllowOverrideAndFinal option defaulting to 0 - thus preserving current behavior - that when enabled allows both `override` and `final` to co-exist, while still fixing all other issues.

The patch includes a test file verifying all combinations of virtual/override/final, and mentions the new option in the release notes.

Reviewers: alexfh, djasper, JonasToth

Patch by: poelmanc

Subscribers: JonasToth, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D70165
clang-tools-extra/clang-tidy/readability/RedundantStringInitCheck.cpp
clang-tools-extra/test/clang-tidy/checkers/readability-redundant-string-init-msvc.cpp
clang-tools-extra/test/clang-tidy/checkers/readability-redundant-string-init.cpp