diff options
author | Pavel Labath <labath@google.com> | 2013-07-26 11:50:42 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2013-07-26 11:50:42 +0000 |
commit | cf878bbe65b9f4b4b5ca96f5f6f33f8ff31349d6 (patch) | |
tree | f00c5294fa6452b542d3d8caf1f33ade145f5183 /clang/test/Analysis/temporaries.cpp | |
parent | 240d480c5f6ae6cbfe40bfb40d83164008a99b09 (diff) | |
download | bcm5719-llvm-cf878bbe65b9f4b4b5ca96f5f6f33f8ff31349d6.tar.gz bcm5719-llvm-cf878bbe65b9f4b4b5ca96f5f6f33f8ff31349d6.zip |
[analyzer] Fix FP warnings when binding a temporary to a local static variable
Summary:
When binding a temporary object to a static local variable, the analyzer would
complain about a dangling reference even though the temporary's lifetime should
be extended past the end of the function. This commit tries to detect these
cases and construct them in a global memory region instead of a local one.
Reviewers: jordan_rose
CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D1133
llvm-svn: 187196
Diffstat (limited to 'clang/test/Analysis/temporaries.cpp')
-rw-r--r-- | clang/test/Analysis/temporaries.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/test/Analysis/temporaries.cpp b/clang/test/Analysis/temporaries.cpp index ebfbfe9bee3..ddad855d338 100644 --- a/clang/test/Analysis/temporaries.cpp +++ b/clang/test/Analysis/temporaries.cpp @@ -141,3 +141,19 @@ namespace destructors { } } } + +void testStaticMaterializeTemporaryExpr() { + static const Trivial &ref = getTrivial(); + clang_analyzer_eval(ref.value == 42); // expected-warning{{TRUE}} + + static const Trivial &directRef = Trivial(42); + clang_analyzer_eval(directRef.value == 42); // expected-warning{{TRUE}} + +#if __cplusplus >= 201103L + thread_local static const Trivial &threadRef = getTrivial(); + clang_analyzer_eval(threadRef.value == 42); // expected-warning{{TRUE}} + + thread_local static const Trivial &threadDirectRef = Trivial(42); + clang_analyzer_eval(threadDirectRef.value == 42); // expected-warning{{TRUE}} +#endif +} |