njames93 updated this revision to Diff 254870. njames93 added a comment. - Added test case
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77199/new/ https://reviews.llvm.org/D77199 Files: clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp clang-tools-extra/test/clang-tidy/checkers/modernize-use-default-member-init.cpp Index: clang-tools-extra/test/clang-tidy/checkers/modernize-use-default-member-init.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/modernize-use-default-member-init.cpp +++ clang-tools-extra/test/clang-tidy/checkers/modernize-use-default-member-init.cpp @@ -432,3 +432,17 @@ // CHECK-MESSAGES: :[[@LINE-2]]:10: warning: use default member initializer for 'k' [modernize-use-default-member-init] // CHECK-FIXES: int i{5}, k{8}; }; + +struct PR45363 { + // Ensure no warning is emitted here + PR45363(int i = 0) : m_i{i} {} + int m_i; +}; + +struct EmptyBracedIntDefault { + EmptyBracedIntDefault() : m_i{} {} + int m_i; + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'm_i' [modernize-use-default-member-init] + // CHECK-FIXES: {{^ }}EmptyBracedIntDefault() {} + // CHECK-FIXES-NEXT: {{^ }}int m_i{}; +}; Index: clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp @@ -17,6 +17,12 @@ namespace tidy { namespace modernize { +namespace { +AST_MATCHER_P(InitListExpr, initCountIs, unsigned, N) { + return Node.getNumInits() == N; +} +} // namespace + static StringRef getValueOfValueInit(const QualType InitType) { switch (InitType->getScalarTypeKind()) { case Type::STK_CPointer: @@ -190,7 +196,7 @@ } void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) { - auto Init = + auto InitBase = anyOf(stringLiteral(), characterLiteral(), integerLiteral(), unaryOperator(hasAnyOperatorName("+", "-"), hasUnaryOperand(integerLiteral())), @@ -198,7 +204,13 @@ unaryOperator(hasAnyOperatorName("+", "-"), hasUnaryOperand(floatLiteral())), cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(), - initListExpr(), declRefExpr(to(enumConstantDecl()))); + declRefExpr(to(enumConstantDecl()))); + + auto Init = + anyOf(initListExpr(anyOf( + allOf(initCountIs(1), hasInit(0, ignoringImplicit(InitBase))), + initCountIs(0))), + InitBase); Finder->addMatcher( cxxConstructorDecl(
Index: clang-tools-extra/test/clang-tidy/checkers/modernize-use-default-member-init.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/modernize-use-default-member-init.cpp +++ clang-tools-extra/test/clang-tidy/checkers/modernize-use-default-member-init.cpp @@ -432,3 +432,17 @@ // CHECK-MESSAGES: :[[@LINE-2]]:10: warning: use default member initializer for 'k' [modernize-use-default-member-init] // CHECK-FIXES: int i{5}, k{8}; }; + +struct PR45363 { + // Ensure no warning is emitted here + PR45363(int i = 0) : m_i{i} {} + int m_i; +}; + +struct EmptyBracedIntDefault { + EmptyBracedIntDefault() : m_i{} {} + int m_i; + // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'm_i' [modernize-use-default-member-init] + // CHECK-FIXES: {{^ }}EmptyBracedIntDefault() {} + // CHECK-FIXES-NEXT: {{^ }}int m_i{}; +}; Index: clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/UseDefaultMemberInitCheck.cpp @@ -17,6 +17,12 @@ namespace tidy { namespace modernize { +namespace { +AST_MATCHER_P(InitListExpr, initCountIs, unsigned, N) { + return Node.getNumInits() == N; +} +} // namespace + static StringRef getValueOfValueInit(const QualType InitType) { switch (InitType->getScalarTypeKind()) { case Type::STK_CPointer: @@ -190,7 +196,7 @@ } void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) { - auto Init = + auto InitBase = anyOf(stringLiteral(), characterLiteral(), integerLiteral(), unaryOperator(hasAnyOperatorName("+", "-"), hasUnaryOperand(integerLiteral())), @@ -198,7 +204,13 @@ unaryOperator(hasAnyOperatorName("+", "-"), hasUnaryOperand(floatLiteral())), cxxBoolLiteral(), cxxNullPtrLiteralExpr(), implicitValueInitExpr(), - initListExpr(), declRefExpr(to(enumConstantDecl()))); + declRefExpr(to(enumConstantDecl()))); + + auto Init = + anyOf(initListExpr(anyOf( + allOf(initCountIs(1), hasInit(0, ignoringImplicit(InitBase))), + initCountIs(0))), + InitBase); Finder->addMatcher( cxxConstructorDecl(
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits