mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
Fix 24060 - Improve "Cannot create instance of abstract class" error (#15463)
This commit is contained in:
parent
d9c080bff4
commit
8f8c1bbb85
4 changed files with 25 additions and 21 deletions
|
@ -3729,12 +3729,13 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor
|
|||
if (cd.isAbstract())
|
||||
{
|
||||
exp.error("cannot create instance of abstract class `%s`", cd.toChars());
|
||||
errorSupplemental(cd.loc, "class `%s` is declared here", cd.toChars());
|
||||
for (size_t i = 0; i < cd.vtbl.length; i++)
|
||||
{
|
||||
FuncDeclaration fd = cd.vtbl[i].isFuncDeclaration();
|
||||
if (fd && fd.isAbstract())
|
||||
{
|
||||
errorSupplemental(exp.loc, "function `%s` is not implemented",
|
||||
errorSupplemental(fd.loc, "function `%s` is not implemented",
|
||||
fd.toFullSignature());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
/*
|
||||
TEST_OUTPUT:
|
||||
---
|
||||
fail_compilation/diag9451.d(26): Error: cannot create instance of abstract class `C2`
|
||||
fail_compilation/diag9451.d(26): function `void f1()` is not implemented
|
||||
fail_compilation/diag9451.d(26): function `void f2(int)` is not implemented
|
||||
fail_compilation/diag9451.d(26): function `void f2(float) const` is not implemented
|
||||
fail_compilation/diag9451.d(26): function `int f2(float) pure` is not implemented
|
||||
fail_compilation/diag9451.d(27): Error: cannot create instance of abstract class `C2`
|
||||
fail_compilation/diag9451.d(21): class `C2` is declared here
|
||||
fail_compilation/diag9451.d(15): function `void f1()` is not implemented
|
||||
fail_compilation/diag9451.d(16): function `void f2(int)` is not implemented
|
||||
fail_compilation/diag9451.d(17): function `void f2(float) const` is not implemented
|
||||
fail_compilation/diag9451.d(18): function `int f2(float) pure` is not implemented
|
||||
---
|
||||
*/
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
/*
|
||||
TEST_OUTPUT:
|
||||
---
|
||||
fail_compilation/fail142.d(20): Error: cannot create instance of abstract class `B`
|
||||
fail_compilation/fail142.d(20): function `void test()` is not implemented
|
||||
fail_compilation/fail142.d(21): Error: cannot create instance of abstract class `B`
|
||||
fail_compilation/fail142.d(15): class `B` is declared here
|
||||
fail_compilation/fail142.d(12): function `void test()` is not implemented
|
||||
---
|
||||
*/
|
||||
|
||||
|
|
|
@ -2,19 +2,20 @@
|
|||
/*
|
||||
TEST_OUTPUT:
|
||||
---
|
||||
fail_compilation/fail17955.d(81): Error: cannot create instance of abstract class `SimpleTimeZone`
|
||||
fail_compilation/fail17955.d(81): function `bool hasDST()` is not implemented
|
||||
fail_compilation/fail17955.d(93): Error: template instance `fail17955.SimpleTimeZone.fromISOExtString!dstring` error instantiating
|
||||
fail_compilation/fail17955.d(25): instantiated from here: `fromISOExtString!string`
|
||||
fail_compilation/fail17955.d(56): instantiated from here: `isISOExtStringSerializable!(SysTime)`
|
||||
fail_compilation/fail17955.d(49): instantiated from here: `toRedis!(SysTime)`
|
||||
fail_compilation/fail17955.d(40): ... (2 instantiations, -v to show) ...
|
||||
fail_compilation/fail17955.d(32): instantiated from here: `indicesOf!(isRedisType, resetCodeExpireTime)`
|
||||
fail_compilation/fail17955.d(67): instantiated from here: `RedisStripped!(User, true)`
|
||||
fail_compilation/fail17955.d(93): Error: calling non-static function `fromISOExtString` requires an instance of type `SimpleTimeZone`
|
||||
fail_compilation/fail17955.d(95): Error: undefined identifier `DateTimeException`
|
||||
fail_compilation/fail17955.d(25): Error: variable `fail17955.isISOExtStringSerializable!(SysTime).isISOExtStringSerializable` - type `void` is inferred from initializer `fromISOExtString("")`, and variables cannot be of type `void`
|
||||
fail_compilation/fail17955.d(54): Error: function `fail17955.toRedis!(SysTime).toRedis` has no `return` statement, but is expected to return a value of type `string`
|
||||
fail_compilation/fail17955.d(82): Error: cannot create instance of abstract class `SimpleTimeZone`
|
||||
fail_compilation/fail17955.d(76): class `SimpleTimeZone` is declared here
|
||||
fail_compilation/fail17955.d(73): function `bool hasDST()` is not implemented
|
||||
fail_compilation/fail17955.d(94): Error: template instance `fail17955.SimpleTimeZone.fromISOExtString!dstring` error instantiating
|
||||
fail_compilation/fail17955.d(26): instantiated from here: `fromISOExtString!string`
|
||||
fail_compilation/fail17955.d(57): instantiated from here: `isISOExtStringSerializable!(SysTime)`
|
||||
fail_compilation/fail17955.d(50): instantiated from here: `toRedis!(SysTime)`
|
||||
fail_compilation/fail17955.d(41): ... (2 instantiations, -v to show) ...
|
||||
fail_compilation/fail17955.d(33): instantiated from here: `indicesOf!(isRedisType, resetCodeExpireTime)`
|
||||
fail_compilation/fail17955.d(68): instantiated from here: `RedisStripped!(User, true)`
|
||||
fail_compilation/fail17955.d(94): Error: calling non-static function `fromISOExtString` requires an instance of type `SimpleTimeZone`
|
||||
fail_compilation/fail17955.d(96): Error: undefined identifier `DateTimeException`
|
||||
fail_compilation/fail17955.d(26): Error: variable `fail17955.isISOExtStringSerializable!(SysTime).isISOExtStringSerializable` - type `void` is inferred from initializer `fromISOExtString("")`, and variables cannot be of type `void`
|
||||
fail_compilation/fail17955.d(55): Error: function `fail17955.toRedis!(SysTime).toRedis` has no `return` statement, but is expected to return a value of type `string`
|
||||
---
|
||||
*/
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue