[PATCH] D26750: [clang-tidy] Add modernize-use-default-member-init check
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 19 09:14:39 PST 2016
aaron.ballman added inline comments.
================
Comment at: clang-tidy/modernize/UseDefaultMemberInitCheck.cpp:33-34
+ case Type::STK_Floating:
+ case Type::STK_IntegralComplex:
+ case Type::STK_FloatingComplex:
+ return "0.0";
----------------
Do these require a literal suffix to avoid conversion?
================
Comment at: clang-tidy/modernize/UseDefaultMemberInitCheck.cpp:62
+ auto *UnaryOp = dyn_cast<UnaryOperator>(E);
+ if (UnaryOp && UnaryOp->getOpcode() == UO_Plus) {
+ return UnaryOp->getSubExpr();
----------------
Elide braces.
================
Comment at: clang-tidy/modernize/UseDefaultMemberInitCheck.cpp:70
+ auto *InitList = dyn_cast<InitListExpr>(E);
+ if (InitList && InitList->getNumInits() == 1) {
+ return InitList->getInit(0);
----------------
Elide braces.
================
Comment at: clang-tidy/modernize/UseDefaultMemberInitCheck.cpp:77-78
+static bool sameValue(const Expr *E1, const Expr *E2) {
+ E1 = ignoreUnaryPlus(getInitializer(E1->IgnoreImpCasts()));
+ E2 = ignoreUnaryPlus(getInitializer(E2->IgnoreImpCasts()));
+
----------------
Do you also want to ignore paren expressions?
================
Comment at: clang-tidy/modernize/UseDefaultMemberInitCheck.cpp:80
+
+ if (isZero(E1) && isZero(E2)) {
+ return true;
----------------
Elide braces (same elsewhere).
================
Comment at: clang-tidy/modernize/UseDefaultMemberInitCheck.cpp:103
+ return cast<DeclRefExpr>(E1)->getDecl() == cast<DeclRefExpr>(E2)->getDecl();
+ default:
+ break;
----------------
Perhaps character and string literals as well?
================
Comment at: clang-tidy/modernize/UseDefaultMemberInitCheck.cpp:106
+ }
+ return false;
+}
----------------
Hoist this into the `default` case and put an `llvm_unreachable()` instead?
================
Comment at: clang-tidy/modernize/UseDefaultMemberInitCheck.cpp:119
+
+AST_MATCHER(FieldDecl, hasInClassInitializer) {
+ return Node.hasInClassInitializer();
----------------
This would be useful as a public matcher, I think. Fine to do in a follow-up patch if you prefer.
================
Comment at: clang-tidy/modernize/UseDefaultMemberInitCheck.cpp:123
+
+void UseDefaultMemberInitCheck::registerMatchers(MatchFinder *Finder) {
+ auto Init =
----------------
This check should not register matchers for C++ < 11.
================
Comment at: docs/clang-tidy/checks/modernize-use-default-member-init.rst:6
+
+This check converts a default constructor's member initializers into default
+member initializers. Other member initializers that match the default
----------------
You should mention that the check does nothing in versions older than C++11.
================
Comment at: docs/clang-tidy/checks/modernize-use-default-member-init.rst:30
+.. note::
+ Only converts member initializers for built-in types, enums and pointers.
+ The `readability-redundant-member-init` check will remove redundant member
----------------
"enums, and pointers", because Oxford commas are the best commas. ;-)
https://reviews.llvm.org/D26750
More information about the cfe-commits
mailing list