Bug 21246 – Compiler must show mismatching types when functions do not properly override
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2020-09-14T05:18:44Z
Last change time
2020-09-15T04:42:52Z
Keywords
pull
Assigned to
No Owner
Creator
Andrej Mitrovic
Comments
Comment #0 by andrej.mitrovich — 2020-09-14T05:18:44Z
foo.d:
-----
module foo;
import std.datetime : Clock;
class B
{
void set (Clock clock) { }
}
-----
test.d:
-----
import foo;
class Clock { }
class C : B
{
override void set (Clock clock) { }
}
void main () { }
-----
$ dmd test.d
> test.d(6,19): Error: function `void test.C.set(Clock clock)` does not override any function, did you mean to override `void foo.B.set(Clock clock)`?
This diagnostic is infuriating. You could easily spend the better part of an hour trying to diagnose what's wrong - the actual issue is that `Clock` refers to two completely different symbols.
But the compiler is not helpful - it keeps recommending to override the method without giving a hint to what is wrong.
Comment #1 by dlang-bot — 2020-09-15T03:58:46Z
@RazvanN7 created dlang/dmd pull request #11734 "Fix Issue 21246 - Compiler must show mismatching types when functions do not properly override" fixing this issue:
- Fix Issue 21246 - Compiler must show mismatching types when functions do not properly override
https://github.com/dlang/dmd/pull/11734
Comment #2 by dlang-bot — 2020-09-15T04:42:52Z
dlang/dmd pull request #11734 "Fix Issue 21246 - Compiler must show mismatching types when functions do not properly override" was merged into master:
- 55d249f513b91aab05a3e634558479233485795d by RazvanN7:
Fix Issue 21246 - Compiler must show mismatching types when functions do not properly override
https://github.com/dlang/dmd/pull/11734