Skip to content

Commit

Permalink
Add a note about a missing optimization in the case of virtual
Browse files Browse the repository at this point in the history
inheritance.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153722 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
rjmccall committed Mar 30, 2012
1 parent 3754f96 commit 56ea377
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 0 deletions.
11 changes: 11 additions & 0 deletions NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,14 @@ only if the non-reachability is not due to macro or template
metaprogramming.

//===---------------------------------------------------------------------===//

We can still apply a modified version of the constructor/destructor
delegation optimization in cases of virtual inheritance where:
- there is no function-try-block,
- the constructor signature is not variadic, and
- the parameter variables can safely be copied and repassed
to the base constructor because either
- they have not had their addresses taken by the vbase initializers or
- they were passed indirectly.

//===---------------------------------------------------------------------===//
3 changes: 3 additions & 0 deletions lib/CodeGen/CGClass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,9 @@ void CodeGenFunction::EmitConstructorBody(FunctionArgList &Args) {

EHScopeStack::stable_iterator CleanupDepth = EHStack.stable_begin();

// TODO: in restricted cases, we can emit the vbase initializers of
// a complete ctor and then delegate to the base ctor.

// Emit the constructor prologue, i.e. the base and member
// initializers.
EmitCtorPrologue(Ctor, CtorType, Args);
Expand Down

0 comments on commit 56ea377

Please sign in to comment.