瀏覽代碼

Add a note about a missing optimization in the case of virtual
inheritance.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153722 91177308-0d34-0410-b5e6-96231b3b80d8

John McCall 13 年之前
父節點
當前提交
56ea377bc5
共有 2 個文件被更改,包括 14 次插入0 次删除
  1. 11 0
      NOTES.txt
  2. 3 0
      lib/CodeGen/CGClass.cpp

+ 11 - 0
NOTES.txt

@@ -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 - 0
lib/CodeGen/CGClass.cpp

@@ -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);