<div dir="ltr">This is more like use-after-scope (not implemented yet) in asan<div><a href="https://code.google.com/p/address-sanitizer/issues/detail?id=83">https://code.google.com/p/address-sanitizer/issues/detail?id=83</a><br>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jul 16, 2014 at 6:35 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"><p dir="ltr">Either msan or the static analyzer might catch this, but there's no straight up compiler warning for this (and as the issue is interprocedural, any such warning would have to be assisted by source annotations)</p>
<div class="HOEnZb"><div class="h5">

<div class="gmail_quote">On Jul 15, 2014 11:58 PM, "Dennis Luehring" <<a href="mailto:dl.soluz@gmx.net" target="_blank">dl.soluz@gmx.net</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

or is that already covered by <a href="https://code.google.com/p/address-sanitizer/issues/detail?id=73" target="_blank">https://code.google.com/p/<u></u>address-sanitizer/issues/<u></u>detail?id=73</a><br>
<br>
example:<br>
<br>
#include <cstdint><br>
#include <cstdio><br>
<br>
class user_t<br>
{<br>
public:<br>
  user_t(const int64_t& p_a):<br>
    m_a(p_a)<br>
  {<br>
  }<br>
<br>
  const int64_t& m_a; // someone added evil & while refactoring<br>
<br>
  int64_t use_it() const<br>
  {<br>
    return m_a;<br>
  }<br>
};<br>
<br>
#define EVIL_TEMPORARY<br>
<br>
//example result:<br>
//EVIL_TEMPORARY  Mode<br>
//     X          Release  --> a: 8, user_a: 75769734271860736 FAIL<br>
//     X          Debug    --> a: 8, user_a: 7 FAIL<br>
//     -          Release  --> a: 8, user_a: 8 OK<br>
//     -          Debug    --> a: 8, user_a: 8 OK<br>
<br>
int main(int argc, char** argv)<br>
{<br>
  const int64_t value = argc+6;<br>
  int64_t a = value;<br>
<br>
#if defined(EVIL_TEMPORARY)<br>
  const user_t user(a++); // the temporary result of a++ is referenced by member m_a<br>
#else<br>
  const user_t user(a);<br>
  ++a;<br>
#endif<br>
  const int64_t user_a = user.use_it();<br>
  const bool ok = user_a == a;<br>
  printf("a: %I64d, user_a: %I64d %s\n", a, user_a, ok ? "OK":"FAIL");<br>
  return ok;<br>
}<br>
______________________________<u></u>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/cfe-dev</a><br>
</blockquote></div>
</div></div><br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>