aboutsummaryrefslogtreecommitdiff
path: root/docs/analyzer/IPA.txt
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2012-08-27 18:39:16 +0000
committerJordan Rose <jordan_rose@apple.com>2012-08-27 18:39:16 +0000
commit7103d2debd3a9856142be953fbf0ccf76f177247 (patch)
tree23d55192488c19573010f93e3baf396f8edd6b0f /docs/analyzer/IPA.txt
parent210f5a28227c90d739298e3e6729e827858fe397 (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.txt12
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.