Clang Project

clang_source_code/test/Analysis/uninit-vals.cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=core.builtin -verify -DCHECK_FOR_CRASH %s
2// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify -analyzer-output=text %s
3
4#ifdef CHECK_FOR_CRASH
5// expected-no-diagnostics
6#endif
7
8namespace PerformTrivialCopyForUndefs {
9struct A {
10  int x;
11};
12
13struct B {
14  A a;
15};
16
17struct C {
18  B b;
19};
20
21void foo() {
22  C c1;
23  C *c2;
24#ifdef CHECK_FOR_CRASH
25  // If the value of variable is not defined and checkers that check undefined
26  // values are not enabled, performTrivialCopy should be able to handle the
27  // case with undefined values, too.
28  c1.b.a = c2->b.a;
29#else
30  c1.b.a = c2->b.a; // expected-warning{{1st function call argument is an uninitialized value}}
31                    // expected-note@-1{{1st function call argument is an uninitialized value}}
32#endif
33}
34}
35
36