// RUN: %clang_analyze_cc1 -analyzer-checker=core.builtin -verify -DCHECK_FOR_CRASH %s | |
// RUN: %clang_analyze_cc1 -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{{1st function call argument is an uninitialized value}} | |
#endif | |
} | |
} | |