[PATCH] D35972: Add warning to clang-reorder-fields when reordering breaks member init list dependencies
Sam Conrad via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 29 19:05:32 PDT 2017
sameconrad added inline comments.
================
Comment at: clang-reorder-fields/ReorderFieldsAction.cpp:178
for (const auto *Initializer : CtorDecl->inits()) {
- if (!Initializer->isWritten())
+ if (!Initializer->isMemberInitializer() || !Initializer->isWritten())
continue;
----------------
While adding tests for emitting warnings about base class members I found another bug here- non-member initializers don't have a field decl and so would result in undefind behavior further down when accessing field indexes (I added the test case ClassDerived which would cause a segfault before this change).
================
Comment at: clang-reorder-fields/ReorderFieldsAction.cpp:111
+ Results.insert(FD);
+ return Results;
+}
----------------
compnerd wrote:
> What if the `FieldDecl` belongs to a base class? Can you add a test case for that scenario?
I've added tests for this scenario and an explanatory comment. It doesn't seem this is actually a problem due to the way Clang constructs the AST. Sema::PerformObjectMemberConversion always inserts an implicit UncheckedDerivedToBase cast when accessing a base class member which means that hasObjectExpression(cxxThisExpr()) won't actually match against such an expression.
================
Comment at: test/clang-reorder-fields/FieldDependencyWarning.cpp:3
+
+#include <string>
+
----------------
alexshap wrote:
> tests should not depend on STL (for good examples see how things are done in clang-tidy tests), so simply remove this include and define a small class with a constructor right here
This has been updated to use a simple struct.
https://reviews.llvm.org/D35972
More information about the cfe-commits
mailing list