36 lines
814 B
C++
36 lines
814 B
C++
// RUN: %clang_analyze_cc1 -analyzer-checker=core.builtin -verify -DCHECK_FOR_CRASH %s
|
|
// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify -analyzer-output=text %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}}
|
|
// expected-note@-1{{1st function call argument is an uninitialized value}}
|
|
#endif
|
|
}
|
|
}
|
|
|