Bug 20861 – Interface implementations are not checked when code gen is skipped

Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2020-05-24T14:12:34Z
Last change time
2020-05-30T14:41:42Z
Keywords
pull
Assigned to
No Owner
Creator
Jacob Carlborg

Comments

Comment #0 by doob — 2020-05-24T14:12:34Z
The following code should fail to compile but doesn't when code gen is skipped, i.e. the `-o-` flag is used: interface Foo { void foo(); } class Bar : Foo { } The reason being that the check if a class implements all methods of an interface is performed when generating code for the vtable.
Comment #1 by dlang-bot — 2020-05-28T05:46:49Z
@jacob-carlborg created dlang/dmd pull request #11191 "Fix issue 20861: Interface implementations are not checked when code gen is skipped" fixing this issue: - Fix issue 20861: Interface implementations are not checked when code gen is skipped The problem being that check was performed when the vtable was generated, during code generation. If the compiler was invoked with `-o-`, which skips code generation, the check was not performed. The fix is to move the check to the semantic phase of the compilation. This is also required for Objective-C classes, which don't have a vtable at all, even during code generation. https://github.com/dlang/dmd/pull/11191
Comment #2 by dlang-bot — 2020-05-30T14:41:42Z
dlang/dmd pull request #11191 "Fix issue 20861: Interface implementations are not checked when code gen is skipped" was merged into master: - 56ebebf05467ea4069a36c584529f3b7dbb562ad by Jacob Carlborg: Fix issue 20861: Interface implementations are not checked when code gen is skipped The problem being that check was performed when the vtable was generated, during code generation. If the compiler was invoked with `-o-`, which skips code generation, the check was not performed. The fix is to move the check to the semantic phase of the compilation. This is also required for Objective-C classes, which don't have a vtable at all, even during code generation. https://github.com/dlang/dmd/pull/11191