Browse Source

Remove CheckVTableComponentsPass.

It was added 3 years ago as a workaround for Clang MS vtable layouting bugs which have since been solved upstream.
pull/742/head
Joao Matos 9 years ago
parent
commit
90abca7dc2
  1. 2
      src/Generator/Driver.cs
  2. 34
      src/Generator/Passes/CheckVTableComponentsPass.cs

2
src/Generator/Driver.cs

@ -328,8 +328,6 @@ namespace CppSharp @@ -328,8 +328,6 @@ namespace CppSharp
TranslationUnitPasses.AddPass(new ParamTypeToInterfacePass());
}
TranslationUnitPasses.AddPass(new CheckVTableComponentsPass());
if (Options.IsCSharpGenerator)
TranslationUnitPasses.AddPass(new DelegatesPass());

34
src/Generator/Passes/CheckVTableComponentsPass.cs

@ -1,34 +0,0 @@ @@ -1,34 +0,0 @@
using System.Linq;
using CppSharp.AST;
using CppSharp.Utils;
namespace CppSharp.Passes
{
/// <summary>
/// This pass checks for vftable entries with duplicated components.
/// This might happen because of bugs in Clang vftable layouting.
/// </summary>
public class CheckVTableComponentsPass : TranslationUnitPass
{
public override bool VisitClassDecl(AST.Class @class)
{
foreach (var vfptr in @class.Layout.VFTables)
{
var uniqueEntries = new OrderedSet<VTableComponent>();
foreach (var entry in vfptr.Layout.Components)
uniqueEntries.Add(entry);
// The vftable does not have duplicated components.
if (vfptr.Layout.Components.Count == uniqueEntries.Count)
continue;
Diagnostics.Warning(
"Class '{0}' found with duplicated vftable components",
@class.Name);
vfptr.Layout.Components = uniqueEntries.ToList();
}
return base.VisitClassDecl(@class);
}
}
}
Loading…
Cancel
Save