<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>