diff options
| author | Artem Dergachev <artem.dergachev@gmail.com> | 2016-10-31 21:11:20 +0000 |
|---|---|---|
| committer | Artem Dergachev <artem.dergachev@gmail.com> | 2016-10-31 21:11:20 +0000 |
| commit | 75f9d3ac7e442342685432f650a226414b44248b (patch) | |
| tree | 4fc21ea0dc4da71847f3dd7eb74fb42f30607808 /clang/test | |
| parent | a1f87e5a1ccedd3525e7752c1012e58df4346f36 (diff) | |
| download | bcm5719-llvm-75f9d3ac7e442342685432f650a226414b44248b.tar.gz bcm5719-llvm-75f9d3ac7e442342685432f650a226414b44248b.zip | |
[analyzer] Allow undefined values in performTrivialCopy.
Reading from a garbage pointer should be modeled as garbage,
and performTrivialCopy should be able to deal with any SVal input.
Patch by Ilya Palachev!
Differential Revision: https://reviews.llvm.org/D25727
llvm-svn: 285640
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Analysis/uninit-vals.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/clang/test/Analysis/uninit-vals.cpp b/clang/test/Analysis/uninit-vals.cpp new file mode 100644 index 00000000000..387c3754dae --- /dev/null +++ b/clang/test/Analysis/uninit-vals.cpp @@ -0,0 +1,34 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core.builtin -verify -DCHECK_FOR_CRASH %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core -verify %s + +#ifdef CHECK_FOR_CRASH +// expected-no-diagnostics +#endif + +namespace PerformTrivialCopyForUndefs { +struct A { + int x; +}; + +struct B { + A a; +}; + +struct C { + B b; +}; + +void foo() { + C c1; + C *c2; +#ifdef CHECK_FOR_CRASH + // If the value of variable is not defined and checkers that check undefined + // values are not enabled, performTrivialCopy should be able to handle the + // case with undefined values, too. + c1.b.a = c2->b.a; +#else + c1.b.a = c2->b.a; // expected-warning{{Function call argument is an uninitialized value}} +#endif +} +} + |

