diff options
author | Jordan Rose <jordan_rose@apple.com> | 2012-08-27 18:39:16 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2012-08-27 18:39:16 +0000 |
commit | 7103d2debd3a9856142be953fbf0ccf76f177247 (patch) | |
tree | 23d55192488c19573010f93e3baf396f8edd6b0f /docs/analyzer/IPA.txt | |
parent | 210f5a28227c90d739298e3e6729e827858fe397 (diff) |
[analyzer] Update inlining design notes for r162681.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162688 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/analyzer/IPA.txt')
-rw-r--r-- | docs/analyzer/IPA.txt | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/docs/analyzer/IPA.txt b/docs/analyzer/IPA.txt index ed28891e8e..5c722c7a0e 100644 --- a/docs/analyzer/IPA.txt +++ b/docs/analyzer/IPA.txt @@ -98,12 +98,13 @@ some cases, however, where the analyzer chooses not to inline: - In C++, constructors are not inlined unless the destructor call will be processed by the ExprEngine. Thus, if the CFG was built without nodes for implicit destructors, or if the destructors for the given object are not - represented in the CFG, the constructor will not be inlined. See "C++ Caveats" - below. - -- In C++, ExprEngine does not inline custom implementations of operator 'new'. + represented in the CFG, the constructor will not be inlined. (As an exception, + constructors for objects with trivial constructors can still be inlined.) See "C++ Caveats" below. +- In C++, ExprEngine does not inline custom implementations of operator 'new' + or operator 'delete'. See "C++ Caveats" below. + - Calls resulting in "dynamic dispatch" are specially handled. See more below. - The FunctionSummaries map stores additional information about declarations, @@ -263,7 +264,8 @@ There are several limitations in the current implementation: - Temporaries are poorly modeled right now because we're not confident in the placement of their destructors in the CFG. We currently won't inline their - constructors, and don't process their destructors at all. + constructors unless the destructor is trivial, and don't process their + destructors at all, not even to invalidate the region. - 'new' is poorly modeled due to some nasty CFG/design issues. This is tracked in PR12014. 'delete' is not modeled at all. |