Skip to content

Commit

Permalink
fix issue 18093: [Reg 2.071] MSCOFF: dmd crashes when overriding a C+…
Browse files Browse the repository at this point in the history
…+ method in a mixin template
  • Loading branch information
rainers authored and wilzbach committed Dec 21, 2017
1 parent 74b4285 commit 691aa65
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 5 deletions.
12 changes: 7 additions & 5 deletions src/dmd/func.d
Expand Up @@ -614,12 +614,14 @@ extern (C++) class FuncDeclaration : Declaration
*/
final BaseClass* overrideInterface()
{
ClassDeclaration cd = parent.isClassDeclaration();
foreach (b; cd.interfaces)
if (ClassDeclaration cd = parent.isClassDeclaration())
{
auto v = findVtblIndex(&b.sym.vtbl, cast(int)b.sym.vtbl.dim);
if (v >= 0)
return b;
foreach (b; cd.interfaces)
{
auto v = findVtblIndex(&b.sym.vtbl, cast(int)b.sym.vtbl.dim);
if (v >= 0)
return b;
}
}
return null;
}
Expand Down
27 changes: 27 additions & 0 deletions test/fail_compilation/fail18093.d
@@ -0,0 +1,27 @@
/* TEST_OUTPUT:
---
fail_compilation/fail18093.d(19): Error: function fail18093.GenericTransitiveVisitor!(ASTCodegen).GenericTransitiveVisitor.ParseVisitMethods!(ASTCodegen).visit does not override any function, did you mean to override 'extern (C++) fail18093.ParseTimeVisitor!(ASTCodegen).ParseTimeVisitor.visit'?
fail_compilation/fail18093.d(24): Error: mixin fail18093.GenericTransitiveVisitor!(ASTCodegen).GenericTransitiveVisitor.ParseVisitMethods!(ASTCodegen) error instantiating
fail_compilation/fail18093.d(27): Error: template instance fail18093.GenericTransitiveVisitor!(ASTCodegen) error instantiating
---
* https://issues.dlang.org/show_bug.cgi?id=18093
*/


struct ASTCodegen {}

extern (C++) class ParseTimeVisitor(AST)
{
void visit() {}
}
template ParseVisitMethods(AST)
{
override void visit() {}
}

class GenericTransitiveVisitor(AST) : ParseTimeVisitor!AST
{
mixin ParseVisitMethods!AST;
}

alias SemanticTimeTransitiveVisitor = GenericTransitiveVisitor!ASTCodegen;

0 comments on commit 691aa65

Please sign in to comment.