[analyzer] Model trivial copy/move ctors with an aggregate bind.
authorJordan Rose <jordan_rose@apple.com>
Wed, 30 Jan 2013 18:16:06 +0000 (18:16 +0000)
committerJordan Rose <jordan_rose@apple.com>
Wed, 30 Jan 2013 18:16:06 +0000 (18:16 +0000)
commit4cf4f8a5d482fa03c712cad493b39057ff93b6ab
tree110444ab61f12ec1eda94989e03825a450d70495
parent2625cf06ffcd69a6b9ad072414e16671faa6ab80
[analyzer] Model trivial copy/move ctors with an aggregate bind.

This is faster for the analyzer to process than inlining the constructor
and performing a member-wise copy, and it also solves the problem of
warning when a partially-initialized POD struct is copied.

Before:
  CGPoint p;
  p.x = 0;
  CGPoint p2 = p; <-- assigned value is garbage or undefined

After:
  CGPoint p;
  p.x = 0;
  CGPoint p2 = p; // no-warning

This matches our behavior in C, where we don't see a field-by-field copy.

<rdar://problem/12305288>

llvm-svn: 173951
clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
clang/test/Analysis/ctor-inlining.mm
clang/test/Analysis/temporaries.cpp