<div class="gmail_quote">On Mon, Aug 6, 2012 at 3:29 PM, Richard Trieu <span dir="ltr"><<a href="mailto:rtrieu@google.com" target="_blank">rtrieu@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Modify the self-reference visitor to mark pass-by-reference to function calls as uninitialized use.  This will warn on code such as:<div><div><br></div><div>const string Foo = "prefix" + Foo + "suffix";</div>

</div></blockquote><div><br></div><div>Can we put this under a more specific -W flag? -Wuninitialized is intended to be essentially free of false positives.</div><div><br></div><div>I'm a little concerned that this uninitialized-variables warning is deviating from the behavior of the CFG-based warning, which explicitly excludes variables passed by reference to functions from its list of uses, so if this is effective at finding bugs, perhaps we should add this check there too.</div>

<div><br></div><div><div>--- lib/Sema/SemaDecl.cpp<span style="white-space:pre-wrap">     </span>(revision 161345)</div><div>+++ lib/Sema/SemaDecl.cpp<span style="white-space:pre-wrap">       </span>(working copy)</div>
<div>@@ -6223,7 +6223,7 @@</div><div> </div><div>     void VisitImplicitCastExpr(ImplicitCastExpr *E) {</div><div>       if ((!isRecordType && E->getCastKind() == CK_LValueToRValue) ||</div><div>-          (isRecordType && E->getCastKind() == CK_NoOp))</div>

<div>+          (E->getCastKind() == CK_NoOp))</div></div><div><br></div><div>Drop these parens... But I'm not really clear on what this is checking for. Presumably qualification conversions, but why are those a good place to look for self-initialization?</div>

</div>