aaron.ballman accepted this revision.
This revision is now accepted and ready to land.

================
Comment at: clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp:284
@@ -283,2 +283,3 @@
       varDecl(isDefinition(), HasDefaultConstructor,
+              hasAutomaticStorageDuration(),
               hasType(recordDecl(has(fieldDecl()),
----------------
alexfh wrote:
> alexfh wrote:
> > aaron.ballman wrote:
> > > michael_miller wrote:
> > > > alexfh wrote:
> > > > > aaron.ballman wrote:
> > > > > > We should add a test that this still diagnoses variables with 
> > > > > > dynamic storage duration. Alternatively, this could be 
> > > > > > `unless(anyOf(hasStaticStorageDuration(), 
> > > > > > hasThreadStorageDuration()))`
> > > > > I don't think it ever diagnosed on the dynamic storage duration, 
> > > > > since it doesn't match `cxxNewExpr` ;)
> > > > Perhaps unrelated but a new expression without the parens wouldn't 
> > > > value-initialize a record type with a default constructor and 
> > > > potentially be a problematic. Maybe we should be checking cxxNewExpr.
> > > Shouldn't it have diagnosed:
> > > ```
> > > struct s {
> > >   int *i;
> > >   s() {}
> > > };
> > > ```
> > > ?
> > This code does not introduce an object with dynamic storage duration. 
> > Variable `i` is just a member variable, and the fact that it's a pointer 
> > doesn't change much. The check used to warn in this case and continues to 
> > do so:
> > 
> >   /tmp/q.cc:3:3: warning: constructor does not initialize these fields: i 
> > [cppcoreguidelines-pro-type-member-init]
> >     s() {}
> >     ^
> >         : i()
> > 
> > To resolve the confusion:
> > 
> > [basic.stc]p2
> > | Static, thread, and automatic storage durations are associated with 
> > objects introduced by declarations (3.1) and implicitly created by the 
> > implementation (12.2). The dynamic storage duration is associated with 
> > objects created with operator new (5.3.4).
> Michael, we should be checking `cxxNewExpr`, but I would leave this to you or 
> someone else. In this patch I'm just trying to make the check less noisy.
Ah, that's a very valid point.


http://reviews.llvm.org/D19672



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to