[cfe-dev] is there any way to detect temporary referencing with clang?
Kostya Serebryany
kcc at google.com
Wed Jul 16 08:01:35 PDT 2014
This is more like use-after-scope (not implemented yet) in asan
https://code.google.com/p/address-sanitizer/issues/detail?id=83
On Wed, Jul 16, 2014 at 6:35 PM, David Blaikie <dblaikie at gmail.com> wrote:
> 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)
> On Jul 15, 2014 11:58 PM, "Dennis Luehring" <dl.soluz at gmx.net> wrote:
>
>> or is that already covered by https://code.google.com/p/
>> address-sanitizer/issues/detail?id=73
>>
>> example:
>>
>> #include <cstdint>
>> #include <cstdio>
>>
>> class user_t
>> {
>> public:
>> user_t(const int64_t& p_a):
>> m_a(p_a)
>> {
>> }
>>
>> const int64_t& m_a; // someone added evil & while refactoring
>>
>> int64_t use_it() const
>> {
>> return m_a;
>> }
>> };
>>
>> #define EVIL_TEMPORARY
>>
>> //example result:
>> //EVIL_TEMPORARY Mode
>> // X Release --> a: 8, user_a: 75769734271860736 FAIL
>> // X Debug --> a: 8, user_a: 7 FAIL
>> // - Release --> a: 8, user_a: 8 OK
>> // - Debug --> a: 8, user_a: 8 OK
>>
>> int main(int argc, char** argv)
>> {
>> const int64_t value = argc+6;
>> int64_t a = value;
>>
>> #if defined(EVIL_TEMPORARY)
>> const user_t user(a++); // the temporary result of a++ is referenced by
>> member m_a
>> #else
>> const user_t user(a);
>> ++a;
>> #endif
>> const int64_t user_a = user.use_it();
>> const bool ok = user_a == a;
>> printf("a: %I64d, user_a: %I64d %s\n", a, user_a, ok ? "OK":"FAIL");
>> return ok;
>> }
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140716/d71cb16e/attachment.html>
More information about the cfe-dev
mailing list