<br><br><div class="gmail_quote">On Wed, Oct 24, 2012 at 11:29 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: dblaikie<br>
Date: Wed Oct 24 16:29:06 2012<br>
New Revision: 166625<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=166625&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=166625&view=rev</a><br>
Log:<br>
Fix false positive in -Wunused-variable when a ctor call make involve cleanups.<br>
<br>
Modified:<br>
cfe/trunk/lib/Sema/SemaDecl.cpp<br>
cfe/trunk/test/SemaCXX/warn-unused-variables.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=166625&r1=166624&r2=166625&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=166625&r1=166624&r2=166625&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Oct 24 16:29:06 2012<br>
@@ -1286,6 +1286,8 @@<br>
return false;<br>
<br>
if (const Expr *Init = VD->getInit()) {<br>
+ if (const ExprWithCleanups *Cleanups = dyn_cast<ExprWithCleanups>(Init))<br>
+ Init = Cleanups->getSubExpr();<br>
const CXXConstructExpr *Construct =<br>
dyn_cast<CXXConstructExpr>(Init);<br>
if (Construct && !Construct->isElidable()) {<br>
<br>
Modified: cfe/trunk/test/SemaCXX/warn-unused-variables.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unused-variables.cpp?rev=166625&r1=166624&r2=166625&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unused-variables.cpp?rev=166625&r1=166624&r2=166625&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/SemaCXX/warn-unused-variables.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/warn-unused-variables.cpp Wed Oct 24 16:29:06 2012<br>
@@ -123,3 +123,15 @@<br>
S3 z = a; // expected-warning {{unused variable 'z'}}<br>
}<br>
}<br>
+<br>
+namespace ctor_with_cleanups {<br>
+ struct S1 {<br>
+ ~S1();<br>
+ };<br>
+ struct S2 {<br>
+ S2(const S1&);<br>
+ };<br>
+ void func() {<br>
+ S2 s((S1()));<br>
+ }<br>
+}<br>
<br></blockquote><div><br>So, here S1() will generate a cleanup... however "s" is still unused and of little interest because if I were to write "S1();" there would be cleanup and no "s", isn't it ?<br>
<br>I don't see the point in introducing a named variable when the effect of not introducing it would be identical.<br><br>-- Matthieu<br></div></div>