[clang-tidy] Handle bitfields in cppcoreguidelines-pro-type-member-init if using C++2a
Summary: C++2a allows bitfields to have default member initializers. Add support for this to clang-tidy's cppcoreguidelines-pro-type-member-init check. Reviewers: aaron.ballman, alexfh Reviewed By: aaron.ballman Subscribers: klimek, nemanjai, xazax.hun, kbarton, cfe-commits Differential Revision: https://reviews.llvm.org/D42426 llvm-svn: 323227
This commit is contained in:
parent
c068ff72c5
commit
6e4d53bc2b
@ -404,8 +404,9 @@ void ProTypeMemberInitCheck::checkMissingMemberInitializer(
|
||||
return;
|
||||
// Don't suggest fixes for enums because we don't know a good default.
|
||||
// Don't suggest fixes for bitfields because in-class initialization is not
|
||||
// possible.
|
||||
if (F->getType()->isEnumeralType() || F->isBitField())
|
||||
// possible until C++2a.
|
||||
if (F->getType()->isEnumeralType() ||
|
||||
(!getLangOpts().CPlusPlus2a && F->isBitField()))
|
||||
return;
|
||||
if (!F->getParent()->isUnion() || UnionsSeen.insert(F->getParent()).second)
|
||||
FieldsToFix.insert(F);
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
// RUN: %check_clang_tidy %s cppcoreguidelines-pro-type-member-init %t -- -- -std=c++2a -fno-delayed-template-parsing
|
||||
|
||||
struct PositiveBitfieldMember {
|
||||
PositiveBitfieldMember() {}
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: constructor does not initialize these fields: F
|
||||
unsigned F : 5;
|
||||
// CHECK-FIXES: unsigned F : 5{};
|
||||
};
|
||||
|
||||
struct NegativeUnnamedBitfieldMember {
|
||||
NegativeUnnamedBitfieldMember() {}
|
||||
unsigned : 5;
|
||||
};
|
||||
|
||||
struct NegativeInitializedBitfieldMembers {
|
||||
NegativeInitializedBitfieldMembers() : F(3) { G = 2; }
|
||||
unsigned F : 5;
|
||||
unsigned G : 5;
|
||||
};
|
||||
@ -474,6 +474,7 @@ struct PositiveBitfieldMember {
|
||||
PositiveBitfieldMember() {}
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: constructor does not initialize these fields: F
|
||||
unsigned F : 5;
|
||||
// CHECK-FIXES-NOT: unsigned F : 5{};
|
||||
};
|
||||
|
||||
struct NegativeUnnamedBitfieldMember {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user