1 // RUN: %clang_cc1 -analyze -analyzer-checker=core.builtin -verify -DCHECK_FOR_CRASH %s
2 // RUN: %clang_cc1 -analyze -analyzer-checker=core -verify %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{{Function call argument is an uninitialized value}}
31 #endif
32 }
33 }
34 
35