<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Missing -Wreturn-local-addr warning with std::move"
   href="https://bugs.llvm.org/show_bug.cgi?id=48522">48522</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Missing -Wreturn-local-addr warning with std::move
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows NT
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>-New Bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>efriedma@quicinc.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>aaron@aaronballman.com, htmldeveloper@gmail.com, llvm-bugs@lists.llvm.org, ndesaulniers@google.com, neeilans@live.com, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Testcase:

#include <utility>
const int &byref() {
    int x = 0;
    return std::move(x);
}

This is returning the address of a local variable, but clang doesn't detect it.
 gcc does detect this.

There are a couple ways we could address this:

1. Special-case calls to the symbol std::move.
2. Analyze the loop body of inline functions for a return statement that
returns a reference argument/pointer (sort of like the LLVM IR "returned"
attribute).

The static analyzer's core.StackAddressEscape analysis does correctly warn. 
Not sure how far we want to go in the compiler, but this particular case seems
low-cost/high-impact.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>