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 | |
8 | namespace PerformTrivialCopyForUndefs { |
9 | struct A { |
10 | int x; |
11 | }; |
12 | |
13 | struct B { |
14 | A a; |
15 | }; |
16 | |
17 | struct C { |
18 | B b; |
19 | }; |
20 | |
21 | void 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 | |