[clang-tidy] Handle bitfields in modernize-use-default-member-init if using C++2a

Summary:
C++2a allows bitfields to have default member initializers.
Add support for this to clang-tidy's modernize-use-default-member-init check.

Reviewers: aaron.ballman, alexfh

Reviewed By: aaron.ballman

Subscribers: klimek, xazax.hun, cfe-commits

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

llvm-svn: 323208
This commit is contained in:
Malcolm Parsons 2018-01-23 15:32:42 +00:00
parent 9b4a097f94
commit e034e5eefe
2 changed files with 13 additions and 1 deletions

View File

@ -167,7 +167,9 @@ void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
isDefaultConstructor(), unless(isInstantiated()),
forEachConstructorInitializer(
cxxCtorInitializer(
forField(unless(anyOf(isBitField(),
forField(unless(anyOf(getLangOpts().CPlusPlus2a
? unless(anything())
: isBitField(),
hasInClassInitializer(anything()),
hasParent(recordDecl(isUnion()))))),
isWritten(), withInitializer(ignoringImplicit(Init)))

View File

@ -0,0 +1,10 @@
// RUN: %check_clang_tidy %s modernize-use-default-member-init %t -- -- -std=c++2a
struct PositiveBitField
{
PositiveBitField() : i(6) {}
// CHECK-FIXES: PositiveBitField() {}
int i : 5;
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'i' [modernize-use-default-member-init]
// CHECK-FIXES: int i : 5{6};
};